2017-06-13 104 views
-3

如何用另一個基於屬性的對象數組替換對象數組?用屬性對象基的另一個數組替換對象數組

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

回答

0

可以使用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://stackoverflow.com/questions/44517231/replace-multiple-array-of-object-using-multiple-array對象 –

+0

@AlanJenshen我看到了。請回答我的評論 – Weedoze

+0

回答你的評論? –

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,那麼你需要一個條件,你想要採取哪個錯誤對象。 –

0
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) 
0

我認爲你正在試圖做的是更換一個狀態爲「錯誤」是ARR2對象[0]所以..

for(obj in arr){ 
    arr[obj] = arr[obj]['status'] == 'error' ? arr2[0] : arr[obj]; 
} 
相關問題