用属性对象基的另一个数组替换对象数组
如何用另一个基于属性的对象数组替换对象数组?用属性对象基的另一个数组替换对象数组
var arr = [
{'status':'ok'},
{'status':'ok'},
{'status':'error'}
]
var arr2 = [
{'status':error, 'msg': 'etc', 'more property':true}
]
arr = arr.forEach((obj,i) => { if(obj.status === 'error'){obj = arr2[i]} return obj })
我上面的代码失败了,状态ok没了,我不知道什么是错的。
可以使用Array#map()
创建一个新的阵列做,Array#find()
找对象的第二阵列中
let arr=[{status:"ok"},{status:"ok"},{status:"error"}],
arr2=[{status:"error",msg:"etc","more property":!0}];
arr = arr.map(a=>{
let fullObj = arr2.find(a2=>a2.status===a.status);
return fullObj ? fullObj : a;
});
console.log(arr);
我发现一个问题,你的appraoch https://stackoverflow.com/questions/44517231/replace-multiple-array-of-object-using-multiple-array对象 –
@AlanJenshen我看到了。请回答我的评论 – Weedoze
回答你的评论? –
你可以使用Object.assign
对于给定对象分配新的属性。
var arr = [{ status: 'ok' }, { status: 'ok' }, { status: 'error' }],
arr2 = [{ status: 'error', msg: 'etc', 'more property': true }];
arr.forEach(obj => {
if (obj.status === 'error') {
Object.assign(obj, arr2[0]);
}
});
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
arr [0]有限制,为什么不使用索引?如果我在arr和arr2中有2个错误状态会怎么样? –
如果这是问题,分配也将起作用。是的,它可能会导致与ref分配有关的问题,但它应该像OP的共享代码一样工作。 – Rajesh
@AlanJenshen,那么你需要一个条件,你想要采取哪个错误对象。 –
var arr = [
{'status':'ok'},
{'status':'ok'},
{'status':'error'}
]
var arr2 = [
{'status':error, 'msg': 'etc', 'more property':true}
]
arr = arr.forEach(obj => { if(obj.status === 'error'){obj = arr2[i]} return obj })
中的forEach回调()可以采取额外的ARG的指数,但你忘了提供。所以如果你想要访问索引,你可以这样做。
此外,您将arr分配给forEach的输出,但forEach()不返回任何内容,它只是为数组中的每个元素执行回调。你可以做的是交换出来的地图,这是相似的,但实际上返回一个新的数组。
例:
arr = arr.map((obj, i) => obj.status === 'error' ? arr2[i] : obj)
我认为你正在试图做的是更换一个状态为“错误”是ARR2对象[0]所以..
for(obj in arr){
arr[obj] = arr[obj]['status'] == 'error' ? arr2[0] : arr[obj];
}
是什么期望的输出? – Weedoze
你能告诉我们预期的产量吗? –
'arr2 [i]''i'没有被定义。另外,'arr [2]'也不存在。你能解释一下你想达到什么目的吗? – Rajesh