[英]Adding onClick handlers to items dynamically added to DOM from object
[英]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.