1

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

Following code denotes the person Data with person List. Each person List represents the code. Once executing the code I am getting the 5 different kind of array which contains the code into the personID array. I want the expected out like from the person Data 3rd and 6th object. could someone look into it and modified the code ,I have already attached the required code. Thanks

1
  • Can you please add expected output? Commented Apr 21, 2019 at 13:21

2 Answers 2

1

You can use every() on personID and then use find() inside that.

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

Sign up to request clarification or add additional context in comments.

Comments

0

Here you have another solution, basically you have to check with Array.every() and Array.some() if for every element id inside personID some object inside a personCodes array have a property code that equals 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;}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.