数组每次推送都有相同的项目
array has got same item every push
数组推送将用新值替换旧值,机器人我不明白为什么会这样。
这是我的代码:
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
的数组
您在循环之前创建了一个对象 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 = {};
}
}
数组推送将用新值替换旧值,机器人我不明白为什么会这样。
这是我的代码:
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
的数组您在循环之前创建了一个对象 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 = {};
}
}