Я хочу определить функцию .flatten, которая объединяет несколько элементов в один массив. Я знаю, что следующее невозможно, но по существу я хотел бы сделать это:
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
не подходит для выравнивания массивов. Кроме того, ваш код работает. - person 4castle   schedule 23.07.2016.call()
, вы забыли передать пустой массив в качестве второго аргумента для.reduce()
. - person nnnnnn   schedule 23.07.2016arguments
. Все, что вам нужно сделать, это использоватьArray.prototype
с чем угодно, а затемcall
сarguments
. - person 4castle   schedule 23.07.2016