xkeshav
xkeshav

Reputation: 54016

How to merge array of objects matched with the property from other array

I want to merge 2 arrays to create new which have update value based on key but unable to achieve. I am looking for a simpler solution with the es6/es7 approach.

 let selectedID = [
    {
        "id": 7,
        "selected": true
    },
    {
        "id": 1,        
        "selected": true
    }
];

let baseID = [
    {
        "id": 7,
        "selected": false
    },
    {
        "id": 12,
        "selected": false
    },
    {
        "id": 13,
        "selected": false
    },
    {
        "id": 1,
        "selected": false
    },
    {
        "id": 9,
        "selected": false
    },
    {
        "id": 10,
        "selected": false
    }
];


const op = baseID.map( b => {
    return selectedID.map( f => {
     if(f.id === s.id) {
         return f;
     } else {
      return b;
     }
   });
});

console.log(op);

but it returns an array of items and each item is array of 2 objects.

[[ 
{id: 7, selected: true}
{id: 7, selected: false}
,[],...]

expected output:

[{
            "id": 7,
            "selected": true
        },
        {
            "id": 12,
            "selected": false
        },
        {
            "id": 13,
            "selected": false
        },
        {
            "id": 1,
            "selected": true
        },
        {
            "id": 9,
            "selected": false
        },
        {
            "id": 10,
            "selected": false
        }
    ]

Upvotes: 1

Views: 35

Answers (1)

Alberto Trindade Tavares
Alberto Trindade Tavares

Reputation: 10356

You can use find with map to lookup selectedID array:

let selectedID = [
  {
    id: 7,
    selected: true
  },
  {
    id: 1,
    selected: true
  }
];

let baseID = [
  {
    id: 7,
    selected: false
  },
  {
    id: 12,
    selected: false
  },
  {
    id: 13,
    selected: false
  },
  {
    id: 1,
    selected: false
  },
  {
    id: 9,
    selected: false
  },
  {
    id: 10,
    selected: false
  }
];

const op = baseID.map(
  item => selectedID.find(selectedItem => item.id === selectedItem.id) || item
);

console.log(op);

Upvotes: 1

Related Questions