【问题标题】:Filter an Array based on multiple values根据多个值过滤数组
【发布时间】:2017-03-13 04:54:14
【问题描述】:

我有以下简单的 JSON 数组:

const personList = [
{
    id: 1,
    name: "Phil"
},
{
    id: 2,
    name: "Bren"
},
{
    id: 3,
    name: "Francis Underwood"
},
{
    id: 4,
    name: "Claire Underwood"
},
{
    id: 5,
    name: "Ricky Underwood"
},
{
    id: 6,
    name: "Leo Boykewich"
}
];

我想通过传递一个 id 数组来过滤这个,所以像 [1,4] 这样的东西会被传入,它只会返回“Phill”和“Claire Underwood”

这是函数的样子,但我知道这是错误的,attendeeIds 是传入 [1, 4] 的数组:

getAttendeesForEvent: (attendeeIds) => {
    if (attendeeIds === undefined) return Promise.reject("No attendee id provided");

    return Promise.resolve(personList.filter(x => x.id == [attendeeIds]).shift());
}

我好多年没用过JS了。我一直在寻找示例,但对于我想要实现的目标来说,它们似乎都太复杂了。那么如何根据传入的 id 数组进行过滤呢?

【问题讨论】:

  • 您返回承诺是否有某些特殊原因?

标签: arrays node.js promise


【解决方案1】:
return Promise.resolve(personList.filter(x => attendeeIds.indexOf(x.id) !== -1));

您想检查循环遍历的每个项目的 ID 是否存在于参加者 ID 中。在过滤器中使用 Array.indexOf 来做到这一点。

这将返回一个 { id: #, name: String } 对象数组。

如果您只想返回这些对象的名称,您可以在之后进行映射,使用您提供的函数将一个数组转换为另一个数组。

const filteredNames = personList
    .filter(x => attendeeIds.indexOf(x.id) !== -1)
    .map(x => x.name);
// ['Phil', 'Claire Underwood']

【讨论】:

    【解决方案2】:

    你可以在这些方面做点什么。希望这会有所帮助。

    const personList = [{
      id: 1,
      name: "Phil"
    }, {
      id: 2,
      name: "Bren"
    }, {
      id: 3,
      name: "Francis Underwood"
    }, {
      id: 4,
      name: "Claire Underwood"
    }, {
      id: 5,
      name: "Ricky Underwood"
    }, {
      id: 6,
      name: "Leo Boykewich"
    }];
    let attendeeIds = [1, 5];
    
    let getAttendeesForEvent = () => {
      return new Promise(function(resolve, reject) {
    
        if (attendeeIds === undefined) {
          reject("No attendee id provided");
        } else {
          resolve(personList.filter((x) => attendeeIds.includes(x.id)).map((obj) => obj.name));
        }
      });
    }
    
    getAttendeesForEvent().then((data) => console.log(data))

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多