Фильтр массива типов на основе массива свойств в типе - PullRequest
1 голос
/ 16 апреля 2020

Я работаю в проекте Angular 9 (Typescript).

У меня есть массив строк. У меня также есть массив пользовательского типа.

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

//I declare a custom type
export interface CustomType {
  id: string;
  name: string;
}


//I declare my arrays
customTypesArr: CustomType[] = [
    {id: "000", name: "name 1"},
    {id: "001", name: "name 2"},
    {id: "002", name: "name 3"}
];
customTypesNamesArr: string[] = ["name 3", "name 1"];

Теперь я хочу создать массив из customTypesArr, который включает только те элементы, свойство name которых совпадает с любой строкой в ​​customTypesNamesArr. Конечный результат будет следующим:

myNewCustomTypesArr: CustomType[] = [
    {id: "000", name: "name 1"},
    {id: "002", name: "name 3"}
];

Я думаю, что это будет что-то вроде этого, но я не могу этого добиться:

customTypesArr.filter(item =>
      customTypesNamesArr.forEach(name => {
        if (name == item.name) {
          return item;
        }
      })
    );

Я действительно не конечно, если я должен использовать forEach() в этом сценарии ...

Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020
  var filtered = customTypesArr.filter(function(item) 
  {
   return customTypesNamesArr.indexOf(item.name) !== -1;
  });
1 голос
/ 16 апреля 2020

Вы можете использовать includes метод массивов, чтобы сделать это довольно простым.

customTypesArr.filter(item => customTypesNamesArr.includes(item.name));

По сути, просто сделайте фильтр, где вы проверяете, чтобы увидеть, если имя каждого элемента include редактировал массив разрешенных имен.

...