簡體   English   中英

如何將新屬性推入對象數組中的每個現有對象?

[英]How to push new property into each existing object within object array?

我正在嘗試從多維數組中檢索單個結果,然后將其推入對象數組中包含的每個對象中。

這是我的代碼;

 var data = { "questions": ["Q1", "Q2", "Q3"], "details": [{ "name": "Alex", "values": [27, 2, 14] }, { "name": "Bill", "values": [40, 94, 18] }, { "name": "Gary", "values": [64, 32, 45] }] } var question = "Q1"; var singleResult = []; for (var i = 0; i < data.details.length; i++) { var qIndex = data.questions.indexOf(question) singleResult.push(data.details[i].values[qIndex]) } for (var i = 0; i < singleResult.length; i++) { data.details.push({ single: singleResult[i] }) } console.log(data.details) 

如您所見,它正在將一個新對象推入數組,而我希望將單個結果推入現有的3個對象。

所以我的新數組應該看起來像;

[{
  "name": "Alex",
  "values": [27, 2, 14],
  "single": 27
}, {
  "name": "Bill",
  "values": [40, 94, 18],
  "single": 40

}, {
  "name": "Gary",
  "values": [64, 32, 45],
  "single": 64
}]

我以為使用.concat運行循環可以.concat ,但遺憾的是事實並非如此(至少對我而言!)。

希望一切順利,在此先感謝您的幫助/提前!

我會像這樣重構它:

 var data = { "questions": ["Q1", "Q2", "Q3"], "details": [{ "name": "Alex", "values": [27, 2, 14] }, { "name": "Bill", "values": [40, 94, 18] }, { "name": "Gary", "values": [64, 32, 45] }] } var question = "Q1"; var qIndex = data.questions.indexOf(question) data.details.forEach((obj) => { obj.single = obj.values[qIndex]; }); console.log(data.details) 

強調:

  1. 獲取qIndex應該在循環之外完成-因為無論如何它都保持不變。
  2. 我個人傾向於使用forEach循環而不是for循環,以保持代碼的清潔和可讀性-如果堅持使用,它將完全一樣。
  3. 這里的singleResult數組似乎沒有必要,因為您的目標只是使用字段single擴展詳細的基礎對象-因此我們將其完全刪除。

您可以使用indexOf()獲取問題的索引,然后使用map()獲取修改后的數組。

 var data = {"questions":["Q1","Q2","Q3"],"details":[{"name":"Alex","values":[27,2,14]},{"name":"Bill","values":[40,94,18]},{"name":"Gary","values":[64,32,45]}]} var question = "Q1"; var qIndex = data.questions.indexOf(question); var result = data.details.map(function(e) { var o = JSON.parse(JSON.stringify(e)); o.single = e.values[qIndex]; return o; }); console.log(result); 

 var data = { "questions": ["Q1", "Q2", "Q3"], "details": [{ "name": "Alex", "values": [27, 2, 14] }, { "name": "Bill", "values": [40, 94, 18] }, { "name": "Gary", "values": [64, 32, 45] }] } var question = "Q1"; var singleResult = []; for (var i = 0; i < data.details.length; i++) { var qIndex = data.questions.indexOf(question) singleResult.push(data.details[i].values[qIndex]) } for (var i = 0; i < singleResult.length; i++) { data.details[i].single = singleResult[i]; } console.log(data.details) 

 var data = {"questions": ["Q1", "Q2", "Q3"],"details": [{"name": "Alex","values": [27, 2, 14]}, {"name": "Bill","values": [40, 94, 18]}, {"name": "Gary","values": [64, 32, 45]}]}, question = "Q1", qIndex = data.questions.indexOf(question); for (var i = 0, len = data.details.length; i < len; i++) { data.details[i].single = data.details[i].values[qIndex]; } console.log(data.details); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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