我有以下简单的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数组来过滤这个?
答案 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))