基于并集和交集合并两个json数组对象

时间:2016-05-18 15:32:16

标签: javascript angularjs json underscore.js

我试图将两个json数组与对象合并为元素。您可以为这两个json引用此plunkr file。我已成功检索到预期的最终结果数组ID,但我不知道如何形成预期的json,如下所示。我为此目的使用下划线js。

注意:如果对象存在于newJson而不是currentJson中,则在合并之后,默认情况下它将为inactive状态。

我不确定我是否使用了正确的方法。这就是我的尝试:

var newJsonID = _.pluck(newJson, 'id');
var currentJsonID =  _.pluck(currentJson, 'id');
var union = _.union(newJsonID, currentJsonID);
var intersection = _.intersection(currentJsonID, newJsonID);
var final = _.difference(union, _.difference( currentJsonID, intersection);

预期最终结果:

   [
    {
        "id": "12",
        "property1Name": "1"
        "status": "inactive"
    },
    {
        "id": "11",
        "property1Name": "1"
        "status": "inactive"
    },
    {
        "id": "10",
        "property1Name": "1"
        "status": "inactive"
    },
    {
        "id": "9",
        "property1Name": "1"
        "status": "active"
    }
]

1 个答案:

答案 0 :(得分:1)

普通Javascript中的解决方案,包含两个循环和一个用于查找的哈希表。



function update(newArray, currentArray) {
    var hash = Object.create(null);
    currentArray.forEach(function (a) {
        hash[a.id] = a.status;
    });
    newArray.forEach(function (a) {
        a.status = hash[a.id] || 'inactive';
    });
}

var newJson = [{ "id": "12", "property1Name": "1" }, { "id": "11", "property1Name": "1" }, { "id": "10", "property1Name": "1" }, { "id": "9", "property1Name": "1" }],
    currentJson = [{ "id": "10", "property1Name": "1", "status": "inactive" }, { "id": "9", "property1Name": "1", "status": "active" }, { "id": "8", "property1Name": "1", "status": "active" }, { "id": "7", "property1Name": "1", "status": "inactive" }];
   
update(newJson, currentJson);
document.write('<pre>' + JSON.stringify(newJson, 0, 4) + '</pre>');
&#13;
&#13;
&#13;