2016-12-30 5 views
3

複数のjsonオブジェクトを共通IDでマージする必要があります。私の問題は、私のオブジェクトがIDのキーが違うことです。異なるIDを持つオブジェクトの複数の配列をマージする

var object1 = [ 
    { "name":"apples" ,"w": 1, "x": 2 }, 
    { "name":"banana" ,"w": 1, "x": 2 }, 
    { "name":"cherry" ,"w": 1, "x": 2 }, 
]; 
var object2 = [ 
    { "type":"banana" ,"y": 3, "x": 4 }, 
    { "type":"cherry" ,"y": 3, "x": 4 }, 
]; 

私が取得したいと思います:私は新しいものを作成するのではなく、同じアレイ[オブジェクト1]を使用したい

var object1 = [ 
    { "name":"apples" ,"w": 1, "x": 2 }, 
    { "name":"banana" ,"w": 1, "x": 4, "y": 3 }, 
    { "name":"cherry" ,"w": 1, "x": 4, "y": 3 }, 
]; 

。 私はobject2を通じてcodepen here

+2

何秒 'object2'は' { "タイプ": "石灰"、 "Y":2、 "X":4}のような珍しい果物を含むかの '?そのような場合の結果はどうでしょうか? – RomanPerekhrest

+0

[オブジェクトの2つの配列をマージする]の可能な複写(http://stackoverflow.com/questions/7146217/merge-2-arrays-of-objects) –

答えて

2

同じタイプのオブジェクトがobject2オブジェクトに存在するかどうかをチェックします。

var object1 = [ 
 
    { "name":"apples" ,"w": 1, "x": 2 }, 
 
    { "name":"banana" ,"w": 1, "x": 2 }, 
 
    { "name":"cherry" ,"w": 1, "x": 2 }, 
 
]; 
 
var object2 = [ 
 
    { "type":"banana" ,"y": 3, "x": 4 }, 
 
    { "type":"cherry" ,"y": 3, "x": 4 }, 
 
]; 
 

 

 
var result = object1.reduce(function(r, e) { 
 
    var o = object2.find(a => e.name == a.type); 
 
    r.push(o ? Object.assign({}, e, {x: o.x, y: o.y}) : e); 
 
    return r; 
 
}, []) 
 

 
console.log(result)

+0

ねえ、あなたのソリューションは素晴らしい仕事、私は今それを持っている問題あなたはそれを乗り越える方法を知っていますか? –

+0

このような 'filter'を試してくださいhttps://jsfiddle.net/Lg0wyt9u/1435/ –

2

ループを作成し、Array.prototype.findを使用した場合果物を更新 - デモ下記を参照してください:あなたは新しい配列を作成するためにreduce()を使用して見つけることができます

var object1 = [{ "name":"apples" ,"w": 1, "x": 2 },{ "name":"banana" ,"w": 1, "x": 2 },{ "name":"cherry" ,"w": 1, "x": 2 }]; 
 
var object2 = [{ "type":"banana" ,"y": 3, "x": 4 },{"type":"cherry" ,"y": 3, "x": 4 }]; 
 

 
object2.forEach(function(e){ 
 
    var found = object1.find(function(k){ 
 
    return k.name === e.type; 
 
    }); 
 
    if(found) { 
 
    found.x = e.x; 
 
    found.y = e.y; 
 
    } 
 
}); 
 

 
console.log(object1);
.as-console-wrapper{top:0;max-height:100%!important;}

0

私はあなたの問題の解決策を作った、あなたはそれを試すことができますか?

var object1 = [ 
 
    { "name":"apples" ,"w": 1, "x": 2 }, 
 
    { "name":"banana" ,"w": 1, "x": 2 }, 
 
    { "name":"cherry" ,"w": 1, "x": 2 }, 
 
]; 
 
var object2 = [ 
 
    { "type":"banana" ,"y": 3, "x": 4 }, 
 
    { "type":"cherry" ,"y": 3, "x": 4 }, 
 
]; 
 

 
function mergeObject(obj1,obj2){ 
 
    var obj3 = {}; 
 
    for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } 
 
    for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } 
 
    return obj3; 
 
} 
 

 
function mergeObjectInArray(firstArray, firstArrayKey, secondaryArray, secondaryArrayKey) { 
 
    var resultArray = new Array(); 
 
    for(var firstArrayIndex in firstArray) { 
 
    var firstArrayObject = firstArray[firstArrayIndex]; 
 
    var resultArrayObject = firstArrayObject; 
 
    for(var secondaryArrayIndex in secondaryArray) { 
 
    var secondaryArrayObject = secondaryArray[secondaryArrayIndex]; 
 
     if(firstArrayObject[firstArrayKey] === secondaryArrayObject[secondaryArrayKey]) { 
 
     resultArrayObject = mergeObject(firstArrayObject,secondaryArrayObject); 
 
     delete resultArrayObject[secondaryArrayKey]; 
 
     } 
 
    } 
 
    resultArray.push(resultArrayObject); 
 
    } 
 
    return resultArray; 
 
    
 
} 
 

 
var resultArray = mergeObjectInArray(object1, "name", object2, "type"); 
 

 

 
// Assuming JSON.stringify - not available in IE<8 
 
console.log(JSON.stringify(resultArray)); 
 

 

関連する問題