Array.reduce将初始对象更改为当前值

时间:2017-04-15 17:23:40

标签: javascript jquery arrays reduce

当我尝试将数组缩减为一个对象时,当我没有将初始对象设置为reduce函数之外的变量时,对象的值会不断重写:

relevantGroupFiles.then(function(data) {
  var results = [];
  var rawResults = data.PrimaryQueryResult.RelevantResults.Table.Rows;
  rawResults = _.map(rawResults, function(x) { return x.Cells })

  var propertiesWanted = ['Path', 'Title', 'ccaApplicationFileNumber', 'created']

  rawResults.forEach(function(item) {
    var r = propertiesWanted.reduce(function(total, current) {
      return  total[current] = _.find(item, {"Key": current}).Value
    }, {})

    results.push(r)
  })
})

当我单步执行代码时,第一次迭代会返回:

total = {Path: "somePath"}这很好,然后我想添加下一个属性。

但是接下来的迭代,总变成了这个:total = "somePath"

然后我收到一个错误,因为它试图在somePath上设置下一个属性,它不再是一个对象而是一个字符串?

1 个答案:

答案 0 :(得分:1)

你需要返回总数......

    var r = propertiesWanted.reduce(function(total, current) {
       total[current] = _.find(item, {"Key": current}).Value;
       return total;
    }, {})