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]);