4 回答

TA貢獻1789條經驗 獲得超8個贊
這是一個常見問題。您正在改變對象legend[i]- 但是對于所有索引,這i是對同一對象的引用obj,結果是改變任何一個都會改變它們。
解決方案:每次簡單地推送一個全新的對象,不改變任何東西:
addColors(colorSet) {
for (let i = 0;i<colorSet.length;i++){
this.legend.push({ color: colorSet[i]});
}
}
事實上,您可以通過刪除循環并僅使用map方法和剩余參數來簡化此過程:
addColors(colorSet) {
this.legend.push(...colorSet.map(color => ({ color })))
}

TA貢獻1880條經驗 獲得超4個贊
問題是你有let obj = {};一條線在循環之外for,并且所有被推送到的項目都引用了同一個對象legend。將其移入 for 循環以解決此問題:
var legend = [];
function addColors(colorSet) {
for (let i = 0; i < colorSet.length; i++) {
let obj = {}; // <- new object should be defined here
legend.push(obj);
legend[i].color = colorSet[i];
}
}
addColors(["red", "orange", "purple", "yellow"]);
console.log(legend);

TA貢獻1807條經驗 獲得超9個贊
您可以直接在循環中創建對象。
鏈接這個。
function addColors(colorSet) {
const legends = [];
for (let i = 0;i<colorSet.length;i++){
const obj = {
color: colorSet[i]
}
legends.push(obj)
}
console.log(legends)
}
const colorSet = ["red","orange","purple","yellow"];
addColors(colorSet);

TA貢獻1779條經驗 獲得超6個贊
在 上addColors,問題是您將obj變量推入 for 循環。在 上legend.push(obj),它推送obj變量的引用,而不是 的值,obj因此所有變量都設置為last-index值。
const colorSet = ["red", "orange", "purple", "yellow"];
function addColors(colorSet) {
const legend = [];
for (let i = 0;i< colorSet.length; i++) {
legend.push({}); // - Here, instead of pushing `obj`, push initial value `{}`
legend[i].color = colorSet[i];
}
console.log(legend);
}
addColors(colorSet);
簡單地說,這可以使用Array.prototype.map來完成
const colorSet = ["red","orange","purple","yellow"];
const result = colorSet.map((item) => ({ color: item }));
console.log(result);
添加回答
舉報