【发布时间】:2018-01-30 14:09:11
【问题描述】:
我花了几个小时尝试调试特定代码,最后我注意到我不理解 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 函数有什么误解吗?任何帮助将不胜感激。
【问题讨论】:
-
在下一次迭代中,您将在 reduce 中返回一个数字为
a。数字没有value或start属性。 -
你的 reduce 函数变成了
return (undefined < undefined ? undefined : b.start,所以你总是返回b.start并最终返回数组中最终对象的起始值。 -
@Paulpro 哦哦哦 oic 。我的比较取决于返回的先前值? OMG,完全忽略了这一点。谢谢。
标签: javascript arrays reduce