【问题标题】:Merging Two Array of Objects in angular 6在角度 6 中合并两个对象数组
【发布时间】:2018-07-11 10:21:45
【问题描述】:

我有两个类似的数组。

array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}]

结果应该是这样的。

array3 = [{name: 'arjun', place:'mysore', degree:'BE'}, {name:'kanka',place:'bangalore',degree:'MCA'}];

上述结果数组现在没有重复值。有人可以帮忙吗?

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 数组的长度是否相同?同样的顺序?

标签: javascript arrays json angular


【解决方案1】:

假设您需要通过index 合并数组并且属于same length

let array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
let array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}]

let array3 = array1.map((o,i) => ({...o, ...array2[i]}));
console.log(array3);

【讨论】:

    【解决方案2】:

    我认为你可以使用array#reduce 来做这样的事情:

    array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
    array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}]
    
    var resultArray = array1.reduce((arr, e) => {
      arr.push(Object.assign({}, e, array2.find(a => a.name == e.name)))
      return arr;
    }, [])
    
    
    console.log(resultArray);

    注意:如果这些数组的长度不同,它也可以工作。

    【讨论】:

      【解决方案3】:

      您可以简单地使用Array.map()Object.assign()

      array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
      array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}];
      
      let result = array1.map((a)=>{
       let obj2 = array2.find((b)=> a.name === b.name);
       if(obj2)
        Object.assign(a,obj2);
       return a;
      });
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        像这样使用foreach

        let array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
        let array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}]
        
        
        let array3 = [];
        
        array1.forEach((item, index) => {
            array3.push(item)
            let degree = array2.find(e => e.name === item.name)
            if(degree){
              array3[index].degree = degree.degree
            }
        })
        
        console.log(array3)

        【讨论】:

          【解决方案5】:

          如果两个数组的长度相同,则此解决方案将有效。

          array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
          array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}]
          
          const array3 = [];
          for(let i=0; i < array1.length; i++){
              array3.push(Object.assign(array1[i], array2[i]));
          }
          console.log(array3);
          

          工作JSBin here

          也请看这里:How can I merge properties of two JavaScript objects dynamically?

          【讨论】:

            【解决方案6】:

            您可以通过namereducemap 将属性聚合到一个数组中:

            const array1 = [{name:'arjun', place:'mysore'},{name:'kanka', place:'bangalore'}];
            const array2 = [{name: 'arjun', degree:'BE'},{name:'kanka', degree:'MCA'}];
            
            const objData = [...array1, ...array2].reduce((all, { name, place, degree }) => {
            
                if (!all.hasOwnProperty(name)) all[name] = { name };
                if (place) all[name].place = place;
                if (degree) all[name].degree = degree;
            
                return all;
            
            }, {});
            
            const result = Object.keys(objData).map(k => objData[k]);
            
            console.log(result);
            

            【讨论】:

              猜你喜欢
              • 2021-03-08
              • 1970-01-01
              • 1970-01-01
              • 2020-02-04
              • 2015-01-26
              • 2013-01-17
              • 2015-05-29
              • 2017-04-07
              • 2012-08-06
              相关资源
              最近更新 更多