挑战我正在尝试从对象 A 中选择项目的子集以将其存储在对象 B 中。这似乎是一个非常简单的任务,但由于某种原因,结果不是我所期望的。我从对象 A 中选择 1 项,并希望将其存储在对象 B 的特定索引中:fselection.categories[cindex].name = categories[cindex].name;然而,从对象 A 中选择的项目存储在对象 B 的每个索引中,而不仅仅是存储在cindex. 参见下文 MWE。我试图通过编写一个普通的旧 for 循环来解决这个问题,但这也不能解决它。更重要的是,这一次,对象 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 = ""; }}很奇怪,不是吗?预期结果预期结果是填充fselection.categories[i].name1 个元素categories,即fselection.categories[i].name一流量是多少?加载页面打开控制台 - 它将向您显示实例化的对象数组点击页面上的按钮即可在控制台查看结果
1 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
在您的代码片段中,您使用以下代码填充 fselection.categories:
var initcat = JSON.parse('{ "name": "", "subcategories": [] }');
for(i=0;i<categories.length;i++){
fselection.categories.push(initcat);
}
结果是 fselection.categories 的每个元素都是对同一对象 (initcat) 的引用。如果您更改该对象的属性,它将看起来“到处都在改变”。如果你做的事情更像是:
for (i=0;i<categories.length;i++) {
fselection.categories.push(JSON.parse('{ "name": "", "subcategories": [] }'));
}
那么每个元素将是一个独立的对象,因此可以独立更改。
添加回答
举报
0/150
提交
取消