根据多个值过滤数组

时间:2016-10-31 04:23:25

标签: arrays node.js promise

我有以下简单的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"和克莱尔安德伍德"

这就是函数的样子但我知道错误的参与者是一个在[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数组来过滤这个?

2 个答案:

答案 0 :(得分:1)

return Promise.resolve(personList.filter(x => attendeeIds.indexOf(x.id) !== -1));

您想要检查圈出的每个项目的ID是否存在于attendeeIds中。在过滤器内部使用Array.indexOf来做到这一点。

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

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

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

答案 1 :(得分:1)

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

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))