Javascript 如何返回reduce()中累加器的长度

Javascript 如何返回reduce()中累加器的长度,javascript,reduce,Javascript,Reduce,我正在学习JavaScript中的Reduce迭代器,我试图检查累加器的长度,但它不断返回一个TypeError:无法读取未定义的属性“length” 这是我正在使用的阵列 var songs = [ { name: 'Smooth', artist: 'Santana featuring Rob Thomas', year: 1999, month: 10, day: 23, weeksAtNumberOne: 12, duration:

我正在学习JavaScript中的Reduce迭代器,我试图检查累加器的长度,但它不断返回一个TypeError:无法读取未定义的属性“length”

这是我正在使用的阵列

var songs = [
{
    name: 'Smooth',
    artist: 'Santana featuring Rob Thomas',
    year: 1999,
    month: 10,
    day: 23,
    weeksAtNumberOne: 12,
    duration: '4:00',
},
{
    name: 'What a Girl Wants',
    artist: 'Christina Aguilera',
    year: 2000,
    month: 6,
    day: 15,
    weeksAtNumberOne: 2,
    duration: '3:20',
},
{
    name: 'I Knew I Loved You',
    artist: 'Savage Garden',
    year: 2000,
    month: 8,
    day: 29,
    weeksAtNumberOne: 4,
    duration: '4:10',
},
{
    name: 'Thank God I Found You',
    artist: 'Mariah Carey featuring Joe and 98 Degrees',
    year: 2000,
    month: 2,
    day: 19,
    weeksAtNumberOne: 2,
    duration: '4:17',
},
{
    name: 'Amazed',
    artist: 'Lonestar',
    year: 2000,
    month: 7,
    day: 4,
    weeksAtNumberOne: 2,
    duration: '4:00',
}]
代码

function summerCount(arr) {
return arr.reduce(function(init, next) {
    if ([6,7,8].includes(next.month)) {
        init.push(next.month);
    };
     return init.length;
}, [])};
如果我只返回init,它将返回数组,但如果我添加.length属性,它将抛出TypeError。
提前感谢

您应该在所有迭代完成后才检查累加器的长度,而不是在之前,否则下一次迭代中累加器的值将是一个数字,而不是一个数组(并且您的代码取决于累加器始终是一个数组):

var songs=[{姓名:'Smooth',艺术家:'Santana特写Rob Thomas',年份:1999,月份:10,天:23,周数:12,持续时间:'4:00',},{姓名:'What a Girl Waire',艺术家:'Christina Aguilera',年份:2000,月份:6,天:15,周数:2,持续时间:'3:20',},{姓名:'我知道我爱你',艺术家:'Savage Garden',年份:2000,月份:8,日期:29,周数:4,持续时间:'4:10',},{姓名:'感谢上帝我找到了你',艺术家:'Mariah Carey以乔和98度为特色',年份:2000,月份:2,天:19,周数:2,持续时间:'4:17',},{姓名:'Marzed',艺术家:'Lonestar',年份:2000,月份:7,天:4,周数:2,持续时间:'4:00',}]
函数求和计数(arr){
返回arr.reduce(函数(init,next){
如果([6,7,8]。包括(下个月)){
初始推送(下个月);
};
返回init;
},[])长度;
}

console.log(summerCount(songs));
当您
reduce()中返回init.length
时,它将成为下一个累加器。因此,下一次通过reduce时,您尝试在整数上查找
length
属性,但它不起作用(如您所注意的)

如果需要长度,只需使用reduce返回数组(
returninit
),然后查看返回的数组的长度

如果您只需要计数,则在遍历时将其添加到累加器中并返回数字:

var songs=[{姓名:'Smooth',艺术家:'Santana特写Rob Thomas',年份:1999,月份:10,天:23,周数:12,持续时间:'4:00',},{姓名:'What a Girl want',艺术家:'Christina Aguilera',年份:2000,月份:6,天:15,周数:2,持续时间:'3:20',},{姓名:'我知道我爱你',艺术家:'野人花园',年份:2000,月份:8,日期:29,周数:4,持续时间:'4:10',},{姓名:'感谢上帝,我找到了你',艺术家:'玛丽亚·凯里扮演乔和98度',年份:2000,月份:2,日期:19,周数:2,持续时间:'4:17',},{姓名:“惊奇”,艺术家:“孤独星”,2000年,7月,4日,周数:2,持续时间:4:00,}]
函数求和计数(arr){
返回arr.reduce((init,next)=>init+([6,7,8])。包括(next.month)?1:0
, 0)
}

console.log(summerCount(songs))
你知道reduce做什么吗?如果函数的第一次调用接收到一个空数组和第一个对象,并返回数组的长度,那么第二次调用接收到什么?