亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Javascript 如何將作為函數/方法參數的數組添加到對象數組?

使用 Javascript 如何將作為函數/方法參數的數組添加到對象數組?

牧羊人nacy 2023-05-11 16:47:52
我正在嘗試將作為參數傳遞給 Javascript 類方法的數組與也在該方法中創建的對象數組進行匹配。例如,這是一個傳遞的數組:colorSet = ["red","orange","purple","yellow"]當此數組在下面稱為 addColors 的方法中傳遞時,我需要創建一個對象并根據 colorSet 的長度將該對象推送到一個空數組。這很簡單。 addColors(colorSet) {  let obj = {}  for (let i = 0;i<colorSet.length;i++){   this.legend.push(obj)  }但是,在這樣做之后,我嘗試在同一個 for 循環中將對象鍵“color”添加到對象數組并將其值設置為 colorSet 中的顏色數組。見下文: addColors(colorSet) {  let obj = {}  for (let i = 0;i<colorSet.length;i++){    this.legend.push(obj)    this.legend[i].color = colorSet[i]  }然而,結果如下:0: Object { color: "yellow" }1: Object { color: "yellow" }2: Object { color: "yellow" }3: Object { color: "yellow" }我想要的是這樣的:0: Object { color: "red" }1: Object { color: "orange" }2: Object { color: "purple" }3: Object { color: "yellow" }對此的任何幫助將不勝感激。
查看完整描述

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 })))

}


查看完整回答
反對 回復 2023-05-11
?
慕村225694

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);


查看完整回答
反對 回復 2023-05-11
?
函數式編程

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);


查看完整回答
反對 回復 2023-05-11
?
哆啦的時光機

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);


查看完整回答
反對 回復 2023-05-11
  • 4 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號