Я не получаю ожидаемых результатов при попытке это reduce
в JavaScript:JavaScript-массив уменьшает длину сумм суб-массивов - почему это не работает?
let x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
x.reduce((a,b) => a.length + b.length, []);
Простой, правильно? Вот что я ожидаю, шаг за шагом:
----------------------------------------------------------------
| callback | a (accumulator) | b (currentValue) | return value |
----------------------------------------------------------------
| 1st run | 0 | 3 | 3 |
----------------------------------------------------------------
| 2nd run | 3 | 3 | 6 |
----------------------------------------------------------------
| 2nd run | 6 | 3 | 9 |
----------------------------------------------------------------
Что я на самом деле получаю? NaN
. На английском языке, если я правильно понимаю вещи, итератор сначала смотрит на исходное значение, которое я ему даю (пустой массив как второй аргумент reduce
), и это представлено аргументом a
. Мой код показывает простой .length
на оба добавляемых аргумента. Где я здесь не так?
Входы представляют собой массивы, а не числа, вы замаскируете это в своей диаграмме. Первое значение 'a' -' [] ', а не' 0', поэтому 'a.length' работает. Вернув номер, вы загружаете номер в следующую итерацию и вызываете на нем '.length', что явно не является вашим намерением. – meagar
@meagar Yup, только что понял, что смотрит на код Уайта ниже. Спасибо! –
Если вы намерены суммировать длину массивов, вы можете «правильно отобразить» и «уменьшить»: «x.map (a => a.length) .reduce ((a, b) => a + b) ' – meagar