2016-10-31 4 views
-1

У меня есть следующий простой 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" 
} 
]; 

И я хотел бы, чтобы отфильтровать, передав массив идентификаторов, так что-то вроде [1,4] будет принят в и это будет возвращать только «Филл» и «Клэр Андервуд»

Это то, что функция выглядит, но я знаю, что это неправильно 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()); 
} 

I не использовал JS в годах. Я искал примеры, но все они кажутся слишком сложными для того, чего я пытаюсь достичь. Итак, как я могу отфильтровать это на основе массива идентификаторов?

+0

Есть некоторые особенности причина того, что вы возвращаете обещание? –

ответ

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

Вы хотите проверить, существует ли идентификатор каждого элемента, который ваш цикл зацикливается внутри посетителей. Для этого используйте Array.indexOf внутри фильтра.

Это вернет массив из { id: #, name: String } объектов.

Если вы хотите вернуть только имена этих объектов, вы можете сделать карту впоследствии, которая преобразует массив в другой массив, используя предоставленную вами функцию.

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

Спасибо, что сработал! – graffixnyc

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

Смежные вопросы