【问题标题】:Changing nested object values更改嵌套对象值
【发布时间】:2018-04-30 18:12:58
【问题描述】:

我有一个 JS 对象,我试图循环并更改它的值。

以下对象示例:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 'AB-5R-GF', 
},
{ 
   taskId: 20295176,
   stageId: 'AB-5R-GF',
},
],
'2539643':
[
{ 
   taskId: 28295179,
   stageId: 'AB-5R-RD', 
},
{ 
   taskId: 20445176,
   stageId: 'AB-5R-ZZ',
},
]
}

父值是 JobID,然后是一个数组,其中包含该作业中每个阶段和任务的嵌套对象。

我正在尝试迭代并将 stageID 值更改为序号。作业中的每个数字都高于最后一个,保持重复相同的数字。

期望的结果是:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 1, 
},
{ 
   taskId: 20295176,
   stageId: 1,
},
],
 '2539643':
 [
 { 
   taskId: 28295179,
   stageId: 1, 
   },
   { 
   taskId: 20445176,
   stageId: 2,
},
]
}

我想知道解决这个问题的最佳方法是什么?使用 Lodash 和 _.uniqBy 会是最好的方法吗?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @Tschallacka 问了什么。请显示您迄今为止尝试过的代码。

标签: javascript arrays sorting object lodash


【解决方案1】:

即使您没有展示自己的代码 - 这是我自己的尝试。 未经测试 - 但这里有一个解释。 重建结果,我们从{} 开始,对于每个值的数组项,我们用递增的索引覆盖stageItem。

我们在旁边保留一个列表来跟踪数组中项目的索引,并检查我们是为 stageId 放置新索引还是列表中的现有索引。

var index = 0;
var finalResult = _.reduce(response, function(result, value, key) {
  indexOfIDs = {};
  result[key] = [];
  _.each(value, function(item){
    if(typeof indexOfIds[item.taskId] !== 'undefined'){
       result[key].push(_.assign(item, {stageId: indexOfIds[item.taskId]}))
    } else {
       indexOfIds[item.taskId] = index++;
       result[key].push(_.assign(item, {stageId: index}))
    }

  })
  return result;
}, {})

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 2018-06-21
    • 2020-07-11
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2022-10-12
    • 2018-11-07
    • 2021-11-27
    相关资源
    最近更新 更多