【问题标题】:How to merge two array of object into one array of object based on key?How to merge two array of object into one array of object based on key?
【发布时间】:2022-12-01 20:35:58
【问题描述】:

i'm trying to merge two array of object based on key. two array of object like this,

    let array1 = [
    {
      name: "Deepak",
      age: 20
    },
    {
      name: "John",
      age: 30
    }
    ]
    let array2 = [
    {
      name: "Deepak",
      favGame: "Cricket"
    },
    {
      name: "John",
      favGame: "Football"
    },
    {
      name: "Kailash",
      favGame: "Basketball"
    }
   ]

I found difficulties to merge as expected format. I expecting format like this

   let finalArray = [
    {
        name: "Deepak",
        age: 20,
        favGame: "Cricket"
      },
      {
        name: "John",
        age: 30,
        favGame: "Football"
      },
      {
        name: "Kailash",
        favGame: "Basketball"
      }
    ]

【问题讨论】:

    标签: javascript arrays json object destructure


    【解决方案1】:

    let a1 = [ { name: 'Deepak', age: 20 }, { name: 'John', age: 30 } ]
    let a2 = [
      { name: 'Deepak', favGame: 'Cricket' },
      { name: 'John', favGame: 'Football' },
      { name: 'Kailash', favGame: 'Basketball' }
    ]
    
    console.log(Object.values([...a1, ...a2]
      .reduce((a,{name, ...p})=>(a[name]={...a[name]??{},name,...p},a), {})))

    【讨论】:

      【解决方案2】:

      Using Array.map() and Array.find() can do it

      let array1 = [
          {
            name: "Deepak",
            age: 20
          },
          {
            name: "John",
            age: 30
          }
          ]
      
      let array2 = [
          {
            name: "Deepak",
            favGame: "Cricket"
          },
          {
            name: "John",
            favGame: "Football"
          },
          {
            name: "Kailash",
            favGame: "Basketball"
          }
         ]
         
      let result = array2.map(a => {
         let obj = array1.find(i => i.name === a.name)
         if(obj){
          a.age = obj.age
         }
         return a
      })
      console.log(result)

      【讨论】:

        【解决方案3】:

        You can do it using reduce function:

        const array1 = [
          {
           name: "Deepak",
           age: 20
          },
          {
           name: "John",
           age: 30
          }
        ]
        
        const array2 = [
          {
           name: "Deepak",
           favGame: "Cricket"
          },
          {
           name: "John",
           favGame: "Football"
          },
          {
           name: "Kailash",
           favGame: "Basketball"
          }
        ]
        
        const mergedArrays = [...array1, ...array2];
        const newArray = mergedArrays.reduce(function(result, item) {
          const key = item.name;
          let index = -1;
          result.forEach((resultItem, _index) => {
            if(resultItem.name === key)
            index = _index;
          });
          if(index === -1){
            result.push({});
            index = result.length - 1;
          }
          result[index]["name"] = item.name;
          if(item.age) {
            result[index]["age"] = item.age;
          }
          if(item.favGame) {
            result[index]["favGame"] = item.favGame;
          }
          return result;
        }, []);
        console.log(newArray);

        【讨论】:

          猜你喜欢
          • 2022-12-01
          • 2022-12-01
          • 2022-12-27
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-06
          • 2022-12-02
          • 2023-02-12
          相关资源
          最近更新 更多