35

2 つの json オブジェクトの特定のキーの値をマージできる JavaScript ライブラリ機能があるかどうかを確認しようとしています

var x ={ "student-marks":{'math':1,'physics':5} };
var y ={ "student-marks":{'chemistry':3,'history':2} };

$.extend と $.merge を使用して以下の結果を得る

$.extend({},x,y)  leads to  { "student-marks":{'chemistry':3,'history':2} }

$.merge(x,y) leads to { "student-marks":{'math':1,'physics':2} }

私が探しているのは ‍<code>{ "student-marks":{'math':1,'physics':5, 'chemistry':3,'history':2} }‍</code>

4

5 に答える 5

41

深く伸ばしたい

$.extend(true, {}, x, y);

jQuery.extend([ deep ], target , object1 [, objectN ])のドキュメントを参照してください

于 2013-08-28T21:51:14.700 に答える
12

jQuery に依存しない単純な JavaScript 関数は、ネストされたオブジェクトを持つ 2 つの JSON オブジェクトをマージするのに役立ちます。

function mergeJSON(source1,source2){
    /*
     * Properties from the Souce1 object will be copied to Source2 Object.
     * Note: This method will return a new merged object, Source1 and Source2 original values will not be replaced.
     * */
    var mergedJSON = Object.create(source2);// Copying Source2 to a new Object

    for (var attrname in source1) {
        if(mergedJSON.hasOwnProperty(attrname)) {
          if ( source1[attrname]!=null && source1[attrname].constructor==Object ) {
              /*
               * Recursive call if the property is an object,
               * Iterate the object and set all properties of the inner object.
              */
              mergedJSON[attrname] = mergeJSON(source1[attrname], mergedJSON[attrname]);
          } 

        } else {//else copy the property from source1
            mergedJSON[attrname] = source1[attrname];

        }
      }

      return mergedJSON;
}
于 2014-06-17T10:18:46.540 に答える