簡體   English   中英

如果它與 id 匹配,如何在 object 中的 object 數組中添加一個屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM