用属性对象基的另一个数组替换对象数组

问题描述:

如何用另一个基于属性的对象数组替换对象数组?用属性对象基的另一个数组替换对象数组

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没了,我不知道什么是错的。

+0

是什么期望的输出? – Weedoze

+0

你能告诉我们预期的产量吗? –

+0

'arr2 [i]''i'没有被定义。另外,'arr [2]'也不存在。你能解释一下你想达到什么目的吗? – Rajesh

可以使用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);

+0

我发现一个问题,你的appraoch https://*.com/questions/44517231/replace-multiple-array-of-object-using-multiple-array对象 –

+0

@AlanJenshen我看到了。请回答我的评论 – Weedoze

+0

回答你的评论? –

你可以使用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; }

+0

arr [0]有限制,为什么不使用索引?如果我在arr和arr2中有2个错误状态会怎么样? –

+0

如果这是问题,分配也将起作用。是的,它可能会导致与ref分配有关的问题,但它应该像OP的共享代码一样工作。 – Rajesh

+0

@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]; 
}