陣列推送將用新值替換舊值,機器人我不明白為什么會發生這種情況。
這是我的代碼:
let meta = [];
let counter = 0;
let temp_item = {}
for (let ele of found_spec) {
let ele_clean = cleanItem(ele)
if (ele.includes(':<')) {
temp_item.label = ele_clean;
} else {
temp_item.value = ele_clean;
}
counter ;
if ((counter % 2) == 0) {
meta.push(temp_item)
}
}
let oggetto = {
"id_kromeda": id_kromeda,
"picture": found_picture[1],
"description": found_descrizione[1],
"meta": meta //<--- here is my array with overwritten old values
}
console.log(oggetto); //<--- breakpoint here
}
這是 oggetto console.log(oggetto) 的螢屏截圖,其中包括我的名為 meta

uj5u.com熱心網友回復:
您有一個temp_item在回圈之前創建的物件。然后,您的回圈只需在該物件上設定屬性,然后將該物件推送到陣列中。由于推入陣列不會創建物件的副本,因此您最終只是在回圈中一遍又一遍地修改同一個物件,并將同一個物件一遍又一遍地推入陣列。
因此,您將獲得一個包含所有相同物件的陣列,這些物件具有回圈的最后一次迭代設定的屬性。
您可以通過在將前一個物件推入陣列后創建一個新temp_item物件來修復它,因此每次執行時都會在陣列中得到一個新物件meta.push(temp_item)。
let meta = [];
let counter = 0;
let temp_item = {};
for (let ele of found_spec) {
let ele_clean = cleanItem(ele)
if (ele.includes(':<')) {
temp_item.label = ele_clean;
} else {
temp_item.value = ele_clean;
}
counter ;
if ((counter % 2) == 0) {
meta.push(temp_item);
// now create a new temp_item object for future iterations
temp_item = {};
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475261.html
標籤:javascript 节点.js
上一篇:Sequelize:可選限制引數
下一篇:將負數陣列轉換為正數陣列
