Javascript 如何返回reduce()中累加器的长度
我正在学习JavaScript中的Reduce迭代器,我试图检查累加器的长度,但它不断返回一个TypeError:无法读取未定义的属性“length” 这是我正在使用的阵列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:
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做什么吗?如果函数的第一次调用接收到一个空数组和第一个对象,并返回数组的长度,那么第二次调用接收到什么?