首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用filter()筛选数组

使用filter()筛选数组
EN

Stack Overflow用户
提问于 2018-11-23 14:17:11
回答 1查看 124关注 0票数 2

我有下面的约定列表,我想按专业筛选这个列表,即当我输入15时,它返回id 1和2的约定。

代码语言:javascript
复制
[
 {
   "id": 1,
   "typeActivities": [
      {
        "id"=11,
        "specialitiesId": [10, 15]
      }
   ]
 },
 {
   "id": 2,
   "typeActivities": [
      {
        "id"=22,
        "specialitiesId": [10]
      },
      {
        "id"=222,
        "specialitiesId": [15]
      }
   ]
 },
 {
   "id": 3,
   "typeActivities": [
      {
        "id"=33,
        "specialitiesId": [12]
      }
   ]
 }
]

我试过使用这个函数,但没有返回任何内容。

代码语言:javascript
复制
let input: number = 15;
let convention: Convention[];
convention = this.conventions.filter(convention => {
    let typeActivities: TypeActivity[] = convention.typeActivities.filter(typeActivitiy => {
        if (typeActivitiy.specialitiesId) {
            return input == typeActivitiy.specialitiesId.find(id => id == input);
        }
    });
    //console.log(convention.typeActivities.map(i => i.id).filter(item => typeActivities.map(i => i.id).indexOf(item) >= 0));
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-23 14:20:33

对于这样的事情,Array#some是非常有用的:

代码语言:javascript
复制
let input: number = 15;
let convention: Convention[];
convention = this.conventions.filter(convention =>
    convention.typeActivities.some(activity =>
        activity.specialitiesId.some(e => e == input)
    )
);

convention.typeActivities.some(...)将用每个条目调用它的谓词,直到它用完为止(some返回false),或者谓词返回一个真实值(some返回true);activity.specialitiesId.some(...)也是如此。

Live JavaScript示例:

代码语言:javascript
复制
const example = {
    conventions: [
      {
          "id": 1,
          "typeActivities": [
              {
                 "id": 11,
                 "specialitiesId": [10, 15]
              }
          ]
      },
      {
          "id": 2,
          "typeActivities": [
              {
                  "id": 22,
                  "specialitiesId": [10]
              },
              {
                  "id": 222,
                  "specialitiesId": [15]
              }
          ]
      },
      {
          "id": 3,
          "typeActivities": [
               {
                   "id": 33,
                   "specialitiesId": [12]
               }
          ]
      }
    ],
    find(input) {
      let convention;
      convention = this.conventions.filter(convention =>
        convention.typeActivities.some(activity =>
          activity.specialitiesId.some(e => e == input)
        )
      );
      return convention;
    }
};
console.log(example.find(15));
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53448333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档