Как отфильтровать массив объектов на основе других значений массива с помощью JavaScript? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть простой массив чисел (который для моего приложения представляет собой идентификатор пользователя).Например ...

[1, 2, 3]

У меня также есть массив объектов, таких как

[
    {Id: 1, FirstName: "Bob", LastName: "Jones", EmailAddress: "bob@bob.com"},
    {Id: 2, FirstName: "Tessa", LastName: "Wong", EmailAddress: "tes@wong.com"},
    {Id: 3, FirstName: "Craig", LastName: "Murray", EmailAddress: "Craig@muz.com"},
    {Id: 4, FirstName: "Bryce", LastName: "Willamson", EmailAddress: "email@me.com"},
    {Id: 5, FirstName: "Tony", LastName: "Ocka", EmailAddress: "toni@oz.com"}
]

Что мне нужно сделать, это сопоставить любые значения, которые появляются в исходном массиве с их ключомId во втором массиве объектов (и возвращает новый полный массив объектов, содержащий только совпадения).Так, например, в этом случае, результат, который я ищу:

[
    {Id: 1, FirstName: "Bob", LastName: "Jones", EmailAddress: "bob@bob.com"},
    {Id: 2, FirstName: "Tessa", LastName: "Wong", EmailAddress: "tes@wong.com"},
    {Id: 3, FirstName: "Craig", LastName: "Murray", EmailAddress: "Craig@muz.com"},
]

Любая помощь будет очень признательна.

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Также вы можете сделать это, просматривая второй массив

let arr1 = [1,2,3];

let arr2 = [
    {Id: 1, FirstName: "Bob", LastName: "Jones", EmailAddress: "bob@bob.com"},
    {Id: 2, FirstName: "Tessa", LastName: "Wong", EmailAddress: "tes@wong.com"},
    {Id: 3, FirstName: "Craig", LastName: "Murray", EmailAddress: "Craig@muz.com"},
    {Id: 4, FirstName: "Bryce", LastName: "Willamson", EmailAddress: "email@me.com"},
    {Id: 5, FirstName: "Tony", LastName: "Ocka", EmailAddress: "toni@oz.com"}
]

let result = [];
for(let i in arr2) {
    if(arr1.indexOf(arr2[i].Id)!==-1) result.push(arr2[i]);
}

console.log(result);
0 голосов
/ 17 ноября 2018

Вы можете использовать Set для оптимизации вашей производительности.Операция поиска массива занимает O(n), что увеличивает общую временную сложность вашей функции до O (n ^ 2), тогда как операция поиска в Set занимает O(1), поэтому общая сложность времени составляет O (n).

let arr1 = [1,2,3]

let set = new Set(arr1);

let arr2 = [ {Id: 1, FirstName: "Bob", LastName: "Jones", EmailAddress: "bob@bob.com"}, {Id: 2, FirstName: "Tessa", LastName: "Wong", EmailAddress: "tes@wong.com"}, {Id: 3, FirstName: "Craig", LastName: "Murray", EmailAddress: "Craig@muz.com"}, {Id: 4, FirstName: "Bryce", LastName: "Willamson", EmailAddress: "email@me.com"}, {Id: 5, FirstName: "Tony", LastName: "Ocka", EmailAddress: "toni@oz.com"}];

let result = arr2.filter(({Id}) => set.has(Id))

console.log(result)
0 голосов
/ 17 ноября 2018

Всегда полезно показать свою попытку в OP, чтобы помочь другим пользователям понять, где вы застряли.

Для этого вы можете использовать «Array.filter» и «includes».

let arr1 = [1,2,3]

let arr2 = [
    {Id: 1, FirstName: "Bob", LastName: "Jones", EmailAddress: "bob@bob.com"},
    {Id: 2, FirstName: "Tessa", LastName: "Wong", EmailAddress: "tes@wong.com"},
    {Id: 3, FirstName: "Craig", LastName: "Murray", EmailAddress: "Craig@muz.com"},
    {Id: 4, FirstName: "Bryce", LastName: "Willamson", EmailAddress: "email@me.com"},
    {Id: 5, FirstName: "Tony", LastName: "Ocka", EmailAddress: "toni@oz.com"}
]

let result = arr2.filter(d => arr1.includes(d.Id))

console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...