Angular 2 Filter数组和追加数据

时间:2017-06-12 09:09:41

标签: javascript arrays angular multidimensional-array

快一,我有2个数组/对象。一个包含所有项目,另一个包含来自第一个阵列的所选ID。

我的问题是,循环遍历两个数组的最佳方法是从第二个数组中找到所选项,如果它们是真的,则将数据附加到第一个数组。如果ID匹配,我尝试做的就是追加第一个数组。

例如:

this.categories.filter(
                        category => {

                            this.user.category_ids.filter(
                                selected => {
                                    if(selected == category._id) {
                                        var data = {'selected': true};

                                        category.push(data);
                                    }
                                }
                            );


                            console.log(category);
                        }
                    );

目前我正在循环使用类别对象,然后通过user.category_ids进行循环,如果ID匹配我想要追加选中:如果有意义,则返回第一个数组对象。我收到错误:

core.es5.js:1084 ERROR TypeError: category.push is not a function

我不明白为什么。我也试过拼接。

对我而言,这似乎不是最好的方法,因为我在第一个阵列中有12个项目。如果所有12个都被选中,则第二个阵列将有12个项目。因此,通过12 * 12循环到我的内容并不昂贵。

4 个答案:

答案 0 :(得分:0)

if (selected == category._id) {
  category['selected'] = true;

  /* you can build a interface for category
   * or declare category as any
   * then you can write it as the below
   */
  // category.selected = true;
}

push是为数组添加新项目。

答案 1 :(得分:0)

您可以尝试这样的事情:

this.categories.map(category => {
    category.selected = this.user.category_ids.indexOf(category._id) !== -1;
    return category;
});

答案 2 :(得分:0)

请澄清categories是否是一个对象数组?如果是,那么你不能使用push来添加一个新对象,因为categories中的每个元素都是一个对象,而对象没有push方法。使用

添加新属性到对象

category.selected=true

category['selected']=true;

答案 3 :(得分:0)

假设:

  • this.user.category_ids是一个'对象数组'当你使用' category._id'。
  • 如果ID匹配,则需要添加一个键' select'其值为true,对于id匹配的对象。

解决方案:   - 你得到这个错误category.push不是一个函数,因为category是一个对象而不是一个数组,push只适用于数组。



   if(selected == category._id) {
                                 category['selected']=true;
                                    }