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

Javascript 如何更改对象的值并将对象推回其数组?,javascript,lodash,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

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

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
推送到
id
1的对象的
dataX

(欢迎使用Lodash解决方案。)

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)

var arr=[{id:'1',dataX:'},{id:'2',dataX:'}];
console.log(arr[0]);
控制台日志(arr[1]);
var数据='5';
var bonus='可以将更多数据放入项目';
对于(变量i=0;i
通过寻址数组中的实际项,您不必将其推回。它变了。上面的答案是创建一个新数组来代替现有的数组,并重新映射其中的所有项


如果这是期望的结果,那么这个问题的措辞就很糟糕。

您拥有的是一个对象数组,而不是JSON。而且,它似乎像
el.dataX=target.x一样简单
@Felix Kling我不能这样做,因为
arr
不会更新。然后你需要提供更多信息。默认情况下,对象是可变的。请提供一个例子,再现您的问题。数组中的对象将更新。。。听起来您希望同时更新其他内容。问题完全不清楚谢谢,已选择答案!(尽管没有使用Lodash。)@alexchenco:那么,你说的不起作用的事情实际上起作用了,是吗?@Felix Kling Oh一开始我以为你只是想做
el.dataX=target.x
而不是
json=json.map
。是的,如果您再次重新定义
json
,它就可以工作。@alexchenco:如果不这样做,它也可以正常工作:。如果使用
.map
是解决方案,那么您必须更新问题中的示例,以便更清楚地说明为什么
.map
是解决方案。到目前为止,您提供的信息不需要
.map
作为解决方案。
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]);