[英]how to add a property in object inside array of object if it matches the id
我是 angular 的新手,遇到一個問題,如果有人幫助,那將是可觀的我有一系列如下所示的對象
signals = [{
'signalID': '123'
},{
'signalID': '233'
},{
'signalID': '333'
},{
'signalID': '433'
},{
'signalID': '533'
},{
'signalID': '633'
},{
'signalID': '733'
}]
我有一個如下所示的 object
signalOrder = {
333:1,
433:2,
533:3
}
如果 signalId 在 signalOrder object 中匹配,我想向信號數組添加一個屬性作為 orderNo,否則 orderNo 應該是 null。預期結果:
signals = [{
'signalID': '123',
'orderNo':null
},{
'signalID': '233',
'orderNo':null
},{
'signalID': '333',
'orderNo':1
},{
'signalID': '433',
'orderNo':2
},{
'signalID': '533',
'orderNo':3
},{
'signalID': '633',
'orderNo':null
},{
'signalID': '733',
'orderNo':null
}]
我希望它應該與 javascript map function 一起使用,但不知道如何使用它。
你可以這樣做:
let signals = [{'signalID': '123'},{'signalID': '233'},{'signalID': '333'},{'signalID': '433'},{'signalID': '533'},{'signalID': '633'},{'signalID': '733'}]; let signalOrder = {333:1,433:2,533:3} let mapped = signals.map(x=>{ return { signalID:x.signalID, orderNo:signalOrder[x.signalID] } }) console.log(mapped)
您可以使用Array.map()
來創建您想要的結果。 對於每個信號項,我們將在 signalOrder object 中查找orderNo
。如果不存在,我們將其設置為 null。
const signals = [{ 'signalID': '123' },{ 'signalID': '233' },{ 'signalID': '333' },{ 'signalID': '433' },{ 'signalID': '533' },{ 'signalID': '633' },{ 'signalID': '733' }]; const signalOrder = { 333:1, 433:2, 533:3 } const result = signals.map(({signalID}) => ({ signalID, orderNo: signalOrder[signalID] || null })) console.log('Result:', result)
.as-console-wrapper { max-height: 100%;important: top; 0; }
這與 Angular 或 Typescript 無關。可以使用 vanilla JS Array 方法解決。
這是一個使用Array#map
的方法, 傳播語法,使用 OR ||
的虛假測試 . 嘗試signalOrder[signal.signalID]
會為不可用的屬性返回undefined
,這是錯誤的。 在這些情況下,將使用null
。
嘗試以下
const signals = [{ 'signalID': '123' },{ 'signalID': '233' },{ 'signalID': '333' },{ 'signalID': '433' },{ 'signalID': '533' },{ 'signalID': '633' },{ 'signalID': '733' }] const signalOrder = { 333:1, 433:2, 533:3 } const result = signals.map(signal => ({...signal, orderNo: signalOrder[signal.signalID] || null })); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
signals = [{ 'signalID': '123' },{ 'signalID': '233' },{ 'signalID': '333' },{ 'signalID': '433' },{ 'signalID': '533' },{ 'signalID': '633' },{ 'signalID': '733' }]; signalOrder = { 333:1, 433:2, 533:3 }; signals.map(obj => { if(obj.signalID in signalOrder){ obj.orderNo = signalOrder[obj.signalID] } else{ obj.orderNo = null } }) console.log(signals)
你是對的。 我們可以使用 JS map function 來解決。 我已經驗證了下面的代碼,你可以試試這個:
signals.map(obj => {
if(obj.signalID in signalOrder){
obj.orderNo = signalOrder[obj.signalID]
}
else{
obj.orderNo = null
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.