猿问

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

挑战

我正在尝试从对象 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. 加载页面

  2. 打开控制台 - 它将向您显示实例化的对象数组

  3. 点击页面上的按钮即可在控制台查看结果


慕后森
浏览 80回答 1
1回答

POPMUISE

在您的代码片段中,您使用以下代码填充 fselection.categories:var initcat = JSON.parse('{ "name": "", "subcategories": [] }');for(i=0;i<categories.length;i++){&nbsp; &nbsp; fselection.categories.push(initcat);}结果是 fselection.categories 的每个元素都是对同一对象 (initcat) 的引用。如果您更改该对象的属性,它将看起来“到处都在改变”。如果你做的事情更像是:for (i=0;i<categories.length;i++) {&nbsp; &nbsp; fselection.categories.push(JSON.parse('{ "name": "", "subcategories": [] }'));}那么每个元素将是一个独立的对象,因此可以独立更改。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答