0

次のような 2 つの json 入力があります。

[
  {
    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でそれを行う方法.助けてください.ここでuserIdは一意のフィールドです

4

6 に答える 6

1

各オブジェクトを試していると思います。extendこれは、コレクションの1つをループしてから、対応するオブジェクトを選択して拡張することで実現できます...

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);
于 2013-10-23T11:39:26.357 に答える
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);

ここでフィドル

于 2013-10-23T11:40:11.490 に答える
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);
于 2013-10-23T12:32:50.330 に答える
0

あなたがやりたいことは、関数型プログラミングの同時処理と呼ばれます。2 つのデータがあり、それらをまとめて処理して結果を取得したいと考えています。このコードを検討してください

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);
于 2013-10-23T12:06:26.197 に答える
0

underscore-min.js ファイルを使用して、その inbuild 関数を使用して以下のように試すことができます

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

    })

  });
于 2013-10-23T11:41:46.450 に答える