我花了几个小时尝试调试特定的代码,但最后我发现我对arr reduce函数不了解。以下面的代码示例
var arr = [{
start: 1,
value: 4
}, {
start: 2,
value: 5
}, {
start: 3,
value: 1
}, {
start: 4,
value: 41
}, {
start: 5,
value: 14
}, {
start: 6,
value: 3
}];
const getMinValue = function(a, b) {
return (a.value < b.value) ? a.start : b.start;
}
console.log('The min value ', arr.reduce(getMinValue));
上面的控制台返回6.但是,从数组中可以注意到,该值在
start:3
处为最小值。但是,将代码重写到下面,var arr = [{
start: 1,
value: 4
}, {
start: 2,
value: 5
}, {
start: 3,
value: 1
}, {
start: 4,
value: 41
}, {
start: 5,
value: 14
}, {
start: 6,
value: 3
}];
const getMinValue = function(a, b) {
return (a.value < b.value) ? a : b;
}
console.log('The min value ', arr.reduce(getMinValue));
返回完全正确的对象
{start: 3, value: 1}
。因此console.log('The min value ', arr.reduce(getMinValue).start);
是正确的。为什么第一个请不同?为什么返回6? 。我是否对reduce或getMin函数有误解?任何帮助,将不胜感激。
最佳答案
为什么返回6?
因为a
是accumulator
,它也恰好是每次迭代的返回值。
这条线
return (a.value < b.value) ? a.start : b.start;
转换为条件表达式为
{start: 1, value : 4}.value < { start: 2, value: 5}.value
然后下一次
(4).value < { start: 3, value: 1 } //false hence return 1
由于
(4).value
是undefined
,并且与undefined
的比较总是返回false
。最后一次迭代将是
(14).value < { start: 6, value: 3 }
返回
6
。关于javascript - array.reduce javascript中的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48514746/