如何在不使用内置/预定义函数的情况下合并两个数组

问题描述 投票:0回答:4

输入数组:

var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];

预期产出:

[{EmpID:'1',Name:'PB',EmpCode:'10001',Address:'GGN'},{EmpID:'2',Name:'SS',EmpCode:'10002',Address:'SP-GGN'}]; 

我试过下面的逻辑

function fun(){
    var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
    var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];

    var arr3= [];
        for(var k=0; k < arr1.length; k++){    
        arr3.push(arr1[k]);
        }

    for(var k=0; k < arr2.length; k++){    
        arr3.push(arr2[k]);
        }
    console.log(arr3);

   
        var arr4 = [...arr1, ...arr2];
        console.log(arr4);
}

fun();

输出结果:

[{"EmpID": "2", "Name": "SS", "EmpCode": "10002"},{EmpID: '2', Name: 'SS', EmpCode: '10002'},{EmpID: '1', Address: 'GGN'},{EmpID: '2', Address: 'SP-GGN'}]

我们不能使用

array.filter()
.find()
、嵌套循环等等,只允许自定义逻辑。

预期产出:

[{EmpID:'1',Name:'PB',EmpCode:'10001',Address:'GGN'},{EmpID:'2',Name:'SS',EmpCode:'10002',Address:'SP-GGN'}]; 
javascript node.js reactjs arrays javascript-objects
4个回答
0
投票

为了达到你想要的效果,你可以使用嵌套的 for 循环来匹配两个数组中的 EmpID。我认为这应该有效:

function mergeArrays() {
  var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
  var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];
  var resultArr = [];

  for (var i = 0; i < arr1.length; i++) {
    for (var j = 0; j < arr2.length; j++) {
      if (arr1[i].EmpID === arr2[j].EmpID) {
        var mergedObj = {...arr1[i], ...arr2[j]};
        resultArr.push(mergedObj);
      }
    }
  }

  console.log(resultArr);
}

0
投票

我已经更新了你的代码,你正在做的事情有一些小错误,你需要在第一个循环中放置第二个循环,这样你就可以匹配

EmpID
然后你在对象中
Address
需要根据
EmpID
添加然后你需要在
arr3
中推送对象,如下面的代码所示。

function fun(){
    var arr1 = [{EmpID:'1',Name:'PB',EmpCode:'10001'},{EmpID:'2',Name:'SS',EmpCode:'10002'}]; 
    var arr2 = [{EmpID:'1',Address:'GGN'},{EmpID:'2',Address:'SP-GGN'}];

    var arr3= [];
    for(var k=0; k < arr1.length; k++){    
        let obj = {...arr1[k]}
        for(var j=0; j < arr2.length; j++){
            if (arr1[k].EmpID === arr2[j].EmpID) {
              obj = {...obj, "Address": arr2[j].Address}
            }
        }
        arr3.push(obj);
    }

    console.log(arr3);
}

fun();


0
投票

const arr1 = [{
  EmpID: '1',
  Name: 'PB',
  EmpCode: '10001'
}, {
  EmpID: '2',
  Name: 'SS',
  EmpCode: '10002'
}];

const arr2 = [{
  EmpID: '1',
  Address: 'GGN'
}, {
  EmpID: '2',
  Address: 'SP-GGN'
}];

const arr3 = arr1.map((arr) => {
  const x = arr2.filter((i) => arr.EmpID === i.EmpID)
  return { ...arr,
    ...x[0]
  }
})

console.log(arr3)


-1
投票

const arr1 = [
  { EmpID: "1", Name: "PB", EmpCode: "10001" },
  { EmpID: "2", Name: "SS", EmpCode: "10002" },
];
const arr2 = [
  { EmpID: "1", Address: "GGN" },
  { EmpID: "2", Address: "SP-GGN" },
];

const arr3 = arr1.map((arr, index) => {
  const value = Object.values(arr1[index])[0];
  const indexArr2 = arr2.find((ar2) => ar2.EmpID === value);

  return (arr = { ...arr, ...indexArr2 });
});

console.log("arr3 :>> ", arr3);

© www.soinside.com 2019 - 2024. All rights reserved.