如何更改对象的值并将对象推回其数组?

时间:2016-02-25 17:23:12

标签: javascript lodash

我有一个对象数组,如下所示:

arr: [
  {
    id: '1',
    dataX: ''
  },
  {
    id: '2',
    dataX: ''
  }
]

我想遍历每个对象并为dataX分配一个新值。可以像这样获取新值

_.each(arr, el => {
  if (el.id === target.id) {
    console.log(target.x)
    // => new value that should be assigned to the corresponding object
  }

现在,如何将新的x值推送到相应的对象中(或将新对象推送到相应的位置)?如果是el.id === 1,请将新的x推送到dataX 1的对象的id

(欢迎Lodash解决方案。)

2 个答案:

答案 0 :(得分:1)

Lodash走了! :d

var json = [
  { id: '1', dataX: '' },
  { id: '2', dataX: '' }
]
var target = {id: '2', x: 'X GONE GIVE IT TO YA!'} // Dummy data

// Note: map() returns a new array hence the json = json
json = json.map(item => {
  if (item.id === target.id) {
    item.dataX = target.x
  }
  return item
})

console.log(json)

// If you want to modify the original array of objects
json.forEach(item => {
  if (item.id === target.id) {
    item.dataX = target.x
  }
})

console.log(json)

答案 1 :(得分:1)

Plunker

var arr =[  {    id: '1',    dataX: ''  },  {    id: '2',    dataX: ''  }];

console.log(arr[0]);
console.log(arr[1]);

var datas = '5';
var bonus = 'More data can be placed into the item';

for(var i = 0; i < arr.length; i++){
  arr[i].dataX = datas; //modifies the actual item in the array
  arr[i].dataY = bonus; //javaScript!
}

console.log(arr[0]);
console.log(arr[1]);

通过解决数组中的实际项目,您无需将其重新推入。它已被更改。上面的答案创建了一个新数组来代替现有数组,并重新映射其中的所有项目。

如果这是理想的结果,则问题的措辞很差。