簡體   English   中英

動態在對象中添加項目

[英]Adding Items in object dynamically

我正在嘗試在for循環中的object中添加項目,但是最后一個項目總是重寫我之前添加的值。 P / S我之前曾發布過類似的問題,但是代碼太復雜了,我制作了示例來解釋我的問題。

這是在jsfiddle中: https ://jsfiddle.net/armakarma/ykwc3xse/8/

test(){
  let array = [4,6,7,1]
  let object={}
  for (let i = 0; i < array.length; i++){
    object[array[i]]={name: 'test', id:30}
    if(array[i] > 7){
        object[array[i]]={render: true}
    } else{
        object[array[i]]={render: false}
    }
  }
  console.log(object)   
  }

在if / else語句中,您將覆蓋對象鍵。 相反,您應該使用傳播運算符將屬性添加到現有鍵中,如下所示:

 function test() { let array = [4, 6, 7, 1]; let object = {}; for (let i = 0; i < array.length; i++) { object[array[i]] = { name: 'test', id: 30 }; if (array[i] > 7) { object[array[i]] = { ...object[array[i]], render: true }; } else { object[array[i]] = { ...object[array[i]], render: false }; } } console.log(object); } test() 

您應該使用>=而不是> ,因為要檢查的條件是錯誤的,所以您永遠不會獲得的結果是:

 array = [4,6,7,1] object={} for (let i = 0; i < array.length; i++) { object[array[i]] = { name: "test", id: 30 }; if (array[i] >= 7) { object[array[i]].render = true; } else { object[array[i]].render = false; } } console.log(object) 

在您的示例中,您要添加一個屬性/屬性/鍵,它是object[array[i]]並且對於該循環將是相同的。

所以肯定if-else塊將用相同的鍵替換值

您可以執行以下操作:

 function test() { let array = [4,6,7,10] let object={}; for (let i = 0; i < array.length; i++){ let myobj={name: 'test', id:30}; if(array[i] > 7){ myobj.render= true; } else{ myobj.render= false; } object[array[i]] =myobj; } console.log(object); } test() 

另一種方法,要做的就是使用reduce函數:

test() {
  let array = [4, 6, 7, 1]
  const object = array.reduce((acc, value) => {
    return { ...acc, [value]: { name: 'test', age: 30, render: value <= 7 } }
  }, {})
  console.log(object)
}

比使用for循環更干凈。

暫無
暫無

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

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