Фильтровать элементы в массив в массиве? - PullRequest
1 голос
/ 21 апреля 2019

const personData = {
  personList: [
    {

      personCodes: [
        {
          code: "001",
          desc: "Indian"
        }
      ]
    },
    
    {
     personCodes: [
        {
          code: "002",
          desc: "Spanish"
        }
      ]
    },
    {
      personCodes: [
        {
          code: "001",
          desc: "Spanish"
        },
        {
          code: "002",
          desc: "Spanish1"
        },
        {
          code: "003",
          desc: "Spanish2"
        }
      ]
    },
    
    {
      personCodes: [
        {
          code: "001",
          desc: "Russian"
        }
      ]
    },
    {
      personCodes: [
        {
          code: "001",
          desc: "Spanish"
        },
        {
          code: "002",
          desc: "Indian"
        },
        {
          code: "004",
          desc: "Japanina"
        }
      ]
    },
    {
      personCodes: [
        {
          code: "001",
          desc: "Spanish"
        },
        {
          code: "004",
          desc: "Indian"
        },
        {
          code: "003",
          desc: "Japanina"
        }
      ]
    },
    
  ]
};

const personID = ["001","003"];

const result = personData.personList.filter(role => role.personCodes && role.personCodes.find(group => personID.includes(group.code)));

console.log(result);

Следующий код обозначает личность Данные с личностью Список. Каждый человек Список представляет свой код. После выполнения кода я получаю 5 различных видов массивов, которые содержат код в массиве personID. Я хочу получить ожидаемый, как от лица данных 3-го и 6-го объекта. может кто-то заглянуть в него и изменить код, я уже приложил необходимый код. Спасибо

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Вы можете использовать every() на personID, а затем использовать find() внутри него.

const personData = { personList: [ { personCodes: [ { code: "001", desc: "Indian" } ] }, { personCodes: [ { code: "002", desc: "Spanish" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "002", desc: "Spanish1" }, { code: "003", desc: "Spanish2" } ] }, { personCodes: [ { code: "001", desc: "Russian" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "002", desc: "Indian" }, { code: "004", desc: "Japanina" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "004", desc: "Indian" }, { code: "003", desc: "Japanina" } ] }, ] };

const personID = ["001","003"];

const result = personData.personList.filter(role => 
                 role.personCodes && personID.every(x => 
                    role.personCodes.find(a => x.includes(a.code))
               ));

console.log(result);
0 голосов
/ 21 апреля 2019

Здесь у вас есть другое решение, в основном вы должны проверить с помощью Array.every () и Array.some () , если для каждый элемент id внутри personID некоторые object внутри массива personCodes имеют свойство code, равное id.

const personData = { personList: [ { personCodes: [ { code: "001", desc: "Indian" } ] }, { personCodes: [ { code: "002", desc: "Spanish" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "002", desc: "Spanish1" }, { code: "003", desc: "Spanish2" } ] }, { personCodes: [ { code: "001", desc: "Russian" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "002", desc: "Indian" }, { code: "004", desc: "Japanina" } ] }, { personCodes: [ { code: "001", desc: "Spanish" }, { code: "004", desc: "Indian" }, { code: "003", desc: "Japanina" } ] }, ] };
const personID = ["001", "003"];

const result = personData.personList.filter(role =>
{
    return Array.isArray(role.personCodes) &&
           personID.every(id => role.personCodes.some(p => p.code === id));
});

console.log(result);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...