Объединение длины массивов, почему оно возвращает NaN? JavaScript

#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, например. Скалярные значения не имеют длины.