Как отфильтровать массив в другой массив в angular - PullRequest
0 голосов
/ 04 августа 2020
const arr1 = [
  {
    id: "c1",
    section: {
      name: "emerald",
      room: { id: "r1", name: "Room 1" }
    }
  },
  {
    id: "c2",
    section: {
      name: "diamond",
      room: { id: "r2", name: "Room 2" }
    }
  },
  {
    id: "c3",
    section: {
      name: "gem",
      room: { id: "r3", name: "Room 4" }
    }
  },
  {
    id: "c4",
    section: {
      name: "pearl",
      room: { id: "r5", name: "Room 5" }
    }
  }
];

const arr2 = [
  {
    name: "diamond",
    room: { id: "r2", name: "Room 2" }
  },
  {
    name: "gem",
    room: { id: "r3", name: "Room 4" }
  }
];

ожидаемый результат должен быть:

[{
        id: "c2",
        section:{
            name: 'diamond',
            room: {id: "r2", name: "Room 2"}
        }
    },{
        id: "c3",
        section:{
            name: 'gem',
            room: {id: "r3", name: "Room 4"}
        }
    }];

Как мне отфильтровать массив в другой массив. Я использовал фильтр, но он не работает.

вот код, который я пробовал.

arr1.filter((x: any) => [arr2.room.id].includes(x.section.room.id))

но он не работает. Я пытаюсь отфильтровать два массива, которые будут фильтровать от arr1 до arr2. когда данные из arr1 не существуют на arr2, он удалит их.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

const arr1 = [{
    id: "c1",
    section: {
      name: "emerald",
      room: {
        id: "r1",
        name: "Room 1"
      }
    }
  },
  {
    id: "c2",
    section: {
      name: "diamond",
      room: {
        id: "r2",
        name: "Room 2"
      }
    }
  },
  {
    id: "c3",
    section: {
      name: "gem",
      room: {
        id: "r3",
        name: "Room 4"
      }
    }
  },
  {
    id: "c4",
    section: {
      name: "pearl",
      room: {
        id: "r5",
        name: "Room 5"
      }
    }
  }
];

const arr2 = [{
    name: "diamond",
    room: {
      id: "r2",
      name: "Room 2"
    }
  },
  {
    name: "gem",
    room: {
      id: "r3",
      name: "Room 4"
    }
  }
];

let namesArray = arr2.map(function(item) {
  return item.name;
})

const result = arr1.filter(function(elem) {
  return namesArray.includes(elem.section.name);
});

console.log(result);
1 голос
/ 04 августа 2020

Вот то, что вы ищете:

const arr3 = arr1.filter((x) => arr2.findIndex(y => y.room.id === x.section.room.id) !== -1);

https://jsfiddle.net/9s52Ln36/

Для этого вам нужно перебрать второй массив.

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