我花了几个小时尝试调试特定的代码,但最后我发现我对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?


因为aaccumulator,它也恰好是每次迭代的返回值。

这条线

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).valueundefined,并且与undefined的比较总是返回false

最后一次迭代将是

(14).value < { start: 6,  value: 3 }


返回6

关于javascript - array.reduce javascript中的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48514746/

10-16 13:41