2013-10-23 83 views
0

我有2个JSON投入使用两条JSONs:的Javascript:合并基于其他字段

[ 
    { 
    userId: 32159, 
    userFirstName: "john", 
    userLastName: "doe", 
    plans: [ ] 
    }, 
    { 
    userId: 32157, 
    userFirstName: "dave", 
    userLastName: "mess", 
    plans: [ ] 
    } 
] 

[ 
     { 
     userId: 32159, 
     userFirstName: "john", 
     userLastName: "doe", 
     results: [ ] 
     }, 
     { 
     userId: 32157, 
     userFirstName: "dave", 
     userLastName: "mess", 
     results: [ ] 
     } 
] 

,我想输出为:

[ 
     { 
     userId: 32159, 
     userFirstName: "john", 
     userLastName: "doe", 
     plans: [ ], 
     results: [ ] 
     }, 
     { 
     userId: 32157, 
     userFirstName: "dave", 
     userLastName: "mess", 
     plans: [ ], 
     results: [ ] 
     } 
] 

如何在javascript.Please帮助。这里userId是一个独特的领域

+0

你只是想简单地添加2套? – IProblemFactory

+0

我们可以假设数组的大小相同吗?这些人是否被分类? – IProblemFactory

回答

1

我想你想extend每个对象,这可以通过集合的一个循环,然后选择相应的对象,并扩展它,像这样实现...

var collectionA = [], collectionB = [], 
    result = []; 

$.each(collectionA, function(i, objA) { 
    $.each(collectionB, function(j, objB) { 
     if (objA.userId === objB.userId) { 
      result.push($.extend({}, objA, objB); 
      return false; 
     } 
    }); 
}); 

console.log(result); 
0

使用jQuery的延伸功能:

var json1 = [{ 
    userId: 32159, 
    userFirstName: "john", 
    userLastName: "doe", 
    plans: [] 
}, { 
    userId: 32157, 
    userFirstName: "dave", 
    userLastName: "mess", 
    plans: [] 
}]; 

var json2 = [{ 
    userId: 32157, 
    userFirstName: "dave", 
    userLastName: "mess", 
    results: [] 
}, { 
    userId: 32159, 
    userFirstName: "john", 
    userLastName: "doe", 
    results: [] 
}]; 

var jsonCombined = []; 

for (i = 0; i < json1.length; i++) { 
    for (i2 = 0; i2 < json2.length; i2++) { 
     if (json1[i].userId == json2[i2].userId) 
      jsonCombined.push($.extend(json1[i], json2[i2])); 
    } 
} 

console.log(jsonCombined); 

小提琴here

0

可以用户下划线min.js文件,并尝试下面通过使用其inbuild功能

_.each(json1, function(val1) { 
    _.each(json2, function(val2) { 
      if (val1.userId = val2.userId) { 
       _.extend(val1, val2.results); 
      } 
     } 

    }) 

    }); 
0

你可以用纯JavaScript来做到这一点。一种解决方案可能是这样的。

function copy(obj1, obj2) { 
    for (var x in obj1) 
     if (obj1.hasOwnProperty(x)) 
      obj2[x] = obj1[x]; 
} 

function merge(arr1, arr2) { 
    var fin = []; 

    for (var i = 0; i < arr1.length; i++) { 
     fin.push({}); 
     copy(arr1[i], fin[i]); 
    } 

    for (var i = 0; i < arr2.length; i++) 
     copy(arr2[i], fin[i]); 

    return fin; 
} 

merge(yourfirstobject, yoursecondobject); 
0

你想做的事情叫做功能编程中的同时处理。 你有两块数据,你想一起处理它们以得到结果。考虑以下代码

http://repl.it/Ll1/1

// Array Array -> Array 
// Assume that length of a is equal to length of b 
// and items sorted in the right way to match records 
function zip(a,b) { 
    // Object Object -> Object 
    function add_results(item_a,item_b) { 
     item_a["results"] = item_b["results"] 
     return item_a; 
    } 
    if(a.length===0) { 
     return []; 
    } else { 
     return [add_results(a[0],b[0])].concat(zip(a.slice(1),b.slice(1))); 
    } 
} 

zip(a,b); 
0

我分配工作到离散函数:

function mergeObjects(a, b) { 
    if (a && b) { for (var key in b) { a[key] = b[key]; } } 
    return a; 
} 

function mergeAndSortArrays(a, b) { 
    return a 
     .concat(b) 
     .sort(function (a, b) { return a.userId - b.userId; }); 
} 

function combine(a, b) { 
    var a = mergeAndSortArrays(a, b); 
    for (var i = 0, l = a.length - 1; i < l; i++) { 
     if (a[i].userId === a[i+1].userId) { 
      a[i] = mergeObjects(a[i], a[i+1]); 
      a.splice(i+1, 1); 
      i--; l--; 
     } 
    } 
    return a; 
} 

combine(a, b); 
相关问题