根据ID组合两个JSON对象

时间:2017-10-19 20:31:18

标签: javascript angularjs

我正在尝试使用angular组合两个JSON对象并创建一个对象。不知何故,我能够做到这一点,但一个小故障无法找到可以做的...下面是两个JSON对象:

    var array1 = [
            {
        "personId" : 7,
        "batchNumber": 213,
        "name": "Mike",
        "company":"abc"
    }];

        var array2 = [
            {
        "batchNumber": 213,
        "role": "engineer"

    },
    {
        "batchNumber": 213,
        "role": "architect"
    }];

我希望得到的json是

var result = [
{
        "personId" : 7,
        "batchNumber": 213,
        "name": "Mike",
        "company":"abc",
        "role": "engineer"
    }
    {
        "personId" : 7,
        "batchNumber": 213,
        "name": "Mike",
        "company":"abc",
        "role": "architect"
    }]

我只能创建一个json,然后循环终止/任何帮助都会感激提前感谢。

var array1 = [{
  "personId" : 7,
  "batchNumber": 213,
  "name": "Mike",
  "company":"abc"
}, {
  "personId" : 8,
        "batchNumber": 218,
        "name": "julie",
        "company":"tyu"
}];

var array2 = [{
        "batchNumber": 213,
        "role": "engineer"

    },
    {
        "batchNumber": 213,
        "role": "architect"
    },{
        "batchNumber": 218,
        "role": "BSA"

    },
    {
        "batchNumber": 218,
        "role": "Manager"
    }];

var newArray = [];
for (var i = 0; i < array1.length; i++) {
  var obj = array1[i];
	if (array2[i] && obj.box == array2[i]._id) {
  	for (key in array2[i]) {
      obj[key] = array2[i][key];
    }
    newArray.push(obj);
  }
};

console.log(newArray);

我也附上了JS小提琴:https://jsfiddle.net/n9pv4pL3/

我的控制器:

var array1 = [
        {
    "personId" : 7,
    "batchNumber": 213,
    "name": "Mike",
    "company":"abc"
}];

    var array2 = [
        {
    "batchNumber": 213,
    "role": "engineer"

},
{
    "batchNumber": 213,
    "role": "architect"
}];

    var newArray = [], i,key;
    for (var i = 0; i < array2.length; i++) {
        var obj = array2[i];
        if (array1[i] && obj. INPT_FILE_ID == array1[i].INPT_FILE_ID) {
            for (key in array1[i]) {
                obj[key] = array1[i][key];
            }
            newArray.push(obj);
        }
    };
console.log(newArray);

2 个答案:

答案 0 :(得分:0)

好的,如果你想在一个键下聚合所有角色,你可以用2个reduce函数来完成它,如下所示:

 let workingArray = array1.reduce((prevVal, currVal, index) => {
   let role = array2.reduce((rPrevVal, rCurrVal, idx) => {
     if (currVal.batchNumber === rCurrVal.batchNumber) {
       rPrevVal.push(rCurrVal.role);
     }
     return rPrevVal;
   }, []);
   prevVal.push({
     ...currVal,
     role
   });
   return prevVal;
 }, []);

 console.log(workingArray);

可能不太复杂的解决方案,但我能说什么我喜欢减少功能:)在这里检查小提琴(在控制台中)我在第一个数组中添加了2个不同的对象,在第二个数组中添加了更多的对象:

https://fiddle.jshell.net/pegla/v4qqs3dk/2/

答案 1 :(得分:0)

&#13;
&#13;
var array1 = [
                {
                    "personId": 7,
                    "batchNumber": 213,
                    "name": "Mike",
                    "company": "abc"
                }];

                var array2 = [
                {
                    "batchNumber": 213,
                    "role": "engineer"

                },
                  {
                      "batchNumber": 213,
                      "role": "architect"
                  }];

                var finalData = [];
                array1.forEach(data => {
                    //filter batchwise data
                    var dataFromArray2 = array2.filter(arry2 => {               
                   return arry2.batchNumber === data.batchNumber });
                    //pushing data in main array
                    dataFromArray2.forEach(batchData => {
                        finalData.push({
                            personId: data.personId,
                            batchNumber: batchData.batchNumber,
                            name: data.name,
                            company: data.company,
                            role: batchData.role
                        });
                    });
                });
                console.log(finalData)
&#13;
&#13;
&#13;

这里运行正常,请再次检查,我还为此添加了代码段 关于过滤方法 这是返回新过滤的数组。 在我们的例子中,它返回了包含array2所有属性的新数组 如果你想在deap中理解,那么请参考此链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter