#javascript #arrays
#javascript #массивы
Вопрос:
Информация: Привет, вы можете видеть, что есть 4 массива, а затем массив с этими массивами внутри. Я использую _.reduce для суммирования длины массивов. Я получаю NaN, когда вызываю функцию с массивом массивов. Я бы ожидал получить 19.
Почему это? Спасибо за помощь
var array1 = [[1],[2],[3],[4],[5]];
var array2 = ["a", "b"];
var array3 = [{name : "John"}, {age : 21}];
var array4 = [1,2,3,4,5,6,7,8,9,0];
var array5 = [array4, array3, array2, array1];
var arrayComboLength = function(array){
return _.reduce(array, function(a,b){
return a.length b.length;
});
}
console.log(arrayComboLength(array5)); --> // NaN
Ответ №1:
Первым аргументом обратного вызова reduce
является накопитель. Вы обращаетесь к length
числу, и это приводит к undefined
. И затем вы добавляете undefined
к числам, которые являются длинами остальных массивов, что приводит к undefined
.
var arrayComboLength = function(array) {
return _.reduce(array, function(a, b) {
return a b.length;
}, 0);
}
Это очень близко к примеру, приведенному в документации http://underscorejs.org/#reduce
Комментарии:
1. Привет, большое тебе спасибо, это работает. В вашем решении, если я не включу это 0, я получу это в результате -> // 1,2,3,4,5,6,7,8,9,0225 Не уверен, почему я это получаю. У меня создалось впечатление, что если мы опустим начальное значение (0), с которого оно начнется в любом случае.
2. Исправление У меня создалось впечатление, что если мы опустим начальное значение (0), оно все равно будет начинаться с 0. Это неправда?
3. @AugustusBrennan Нет, он использует первый элемент массива, если вы не укажете иначе, и начинает выполняться со второго элемента. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…
Ответ №2:
Функция подсчета будет рекурсивно применена ко всем элементам массива. Рекурсивно, поэтому они также будут применены к скалярным значениям в array4, например. Скалярные значения не имеют длины.