Я хочу определить функцию .flatten, которая сглаживает несколько элементов в один массив. Я знаю, что следующий не представляется возможным, но, по сути, я хотел бы сделать это:Как бы вы использовали .reduce() для аргументов вместо определенного массива или объекта?
var flatten = function() {
var flattened = arguments.reduce(function(acc, elem) { return acc.concat(elem) }, []);
return flattened;
};
var arr = [[1,2,3], 4, 5, [6, 7]];
console.log(flatten(arr)) // => [1,2,3,4,5,6,7]
Я получаю следующее сообщение об ошибке:
TypeError: arguments.reduce is not a function
Я понимаю, что вышеуказанная ошибка, потому что аргументы только массив -подобный, поэтому он не имеет полных возможностей истинного массива. Таким образом, есть следующие, но мне интересно, если есть что-то еще чище:
var flatten = function() {
var flattened = [].reduce.call(arguments, function(acc, elem) { return acc.concat(elem) });
return flattened;
};
Любой хороший способ переписать .flatten используя .reduce()?
ПРИМЕЧАНИЕ: Я знаю, что есть много других способов, которыми вы можете сглаживать массивы в javascript, но мне было интересно, как это сделать с конкретными аргументами .
'reduce' не хорошо для выравнивания массивов. Кроме того, ваш код работает. – 4castle
Когда вы использовали '.call()', вы забыли передать пустой массив в качестве второго аргумента в '.reduce()'. – nnnnnn
Возможный дубликат [Слияние/сглаживание массива массивов в JavaScript?] (Http://stackoverflow.com/questions/10865025/merge-flatten-an-array-of-arrays-in-javascript) – 4castle