慕后森
2023-07-06 10:04:25
挑戰(zhàn)我正在嘗試從對象 A 中選擇項(xiàng)目的子集以將其存儲在對象 B 中。這似乎是一個非常簡單的任務(wù),但由于某種原因,結(jié)果不是我所期望的。我從對象 A 中選擇 1 項(xiàng),并希望將其存儲在對象 B 的特定索引中:fselection.categories[cindex].name = categories[cindex].name;然而,從對象 A 中選擇的項(xiàng)目存儲在對象 B 的每個索引中,而不僅僅是存儲在cindex. 參見下文 MWE。我試圖通過編寫一個普通的舊 for 循環(huán)來解決這個問題,但這也不能解決它。更重要的是,這一次,對象 A 的每個位置都填充了空字符串?for(i=0;i<fselection.categories.length;i++){ console.log(i); if(i === cindex){ fselection.categories[i].name = categories[i].name; } else { fselection.categories[i].name = ""; }}很奇怪,不是嗎?預(yù)期結(jié)果預(yù)期結(jié)果是填充fselection.categories[i].name1 個元素categories,即fselection.categories[i].name一流量是多少?加載頁面打開控制臺 - 它將向您顯示實(shí)例化的對象數(shù)組點(diǎn)擊頁面上的按鈕即可在控制臺查看結(jié)果
1 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個贊
在您的代碼片段中,您使用以下代碼填充 fselection.categories:
var initcat = JSON.parse('{ "name": "", "subcategories": [] }');
for(i=0;i<categories.length;i++){
fselection.categories.push(initcat);
}
結(jié)果是 fselection.categories 的每個元素都是對同一對象 (initcat) 的引用。如果您更改該對象的屬性,它將看起來“到處都在改變”。如果你做的事情更像是:
for (i=0;i<categories.length;i++) {
fselection.categories.push(JSON.parse('{ "name": "", "subcategories": [] }'));
}
那么每個元素將是一個獨(dú)立的對象,因此可以獨(dú)立更改。
添加回答
舉報(bào)
0/150
提交
取消