Return 缩减后的索引和数组

Return the index and array after reduced

我正在玩mozilla提供的reduce方法。 Underscore 提供了自己的版本,看起来非常相似。减少数组非常简单。

ArrayName.reduce(function(a,b) {
  return a +b;
});

我在对数组进行排序时也使用了非常相似的方法。但是,我不明白的是如何 return 调用列表。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce 提供了一个非常酷的 table 来展示他们的方法是如何工作的。我设置我的阵列几乎相同

var array = [1,2,3,100,55,88,2];
var sortArray= function(a,b) {
  return a -b;
}
var sorted = array.sort(sortArray);


var reduced = sorted.reduce(function(previousValue,currentValue, index,array){
  return previousValue + currentValue;
});

虽然我想设置的是每次调用。我想我可以简单地引用 return 值中的索引,最后加上 ,。

return previousValue + currentValue, index;

但是,那只是 return 的索引。我正在尝试寻找一种方法来获取每次通话的价值。这种方法是否能让您接到每个电话?

您不需要为您正在做的事情使用 reduce。尝试

function running_total(array) {
    var sum = 0;
    return array.map(function(elt) {
      return sum += elt;
    };
}

Reduce 是关于 "boiling down" 一个数组到 "single thing"。相比之下,map 是关于数组的 "transforming" 个元素。您的问题(据我了解)是 transform 数组的每个元素为其自身和所有前面元素的总和。因此,从概念上讲,它是一个 map,而不是 reduce。

您可以创建另一个数组并存储每个进度的值。

var array = [1,2,3,100,55,88,2];
var sortArray= function(a,b) {
  return a -b;
}
var sorted = array.sort(sortArray);

var progress = [];
var reduced = sorted.reduce(function(previousValue,currentValue, index,array){
  progress[index] = previousValue + currentValue;
  return progress[index];
}, 0);
// ^^^^^ 
// give it a init value so it starts at first element.

console.log(progress);

然而,正如所说,正如你期望得到一个数组,你应该使用.map which returns an array 而不是.reduce .

在 return 语句中使用 , 由于逗号运算符规则

只会 return 索引
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {
  console.log(previousValue+"--"+currentValue)
  return previousValue + currentValue;
});

这会如你所愿