为了账号安全,请及时绑定邮箱和手机立即绑定

从一个对象数组中选择项目并将其存储在另一个对象中

从一个对象数组中选择项目并将其存储在另一个对象中

慕后森 2023-07-06 10:04:25
挑战我正在尝试从对象 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": [] }'));

}

那么每个元素将是一个独立的对象,因此可以独立更改。


查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信