71

私は2つのjson配列を持っています

var json1 = [{id:1, name: 'xxx' ...}]
var json2 = [{id:2, name: 'xyz' ...}]

それらを単一の配列にマージしてほしい

var finalObj = [{id:1, name: 'xxx' ...},{id:2, name: 'xyz' ...}]
4

10 に答える 10

121

concatメソッドが必要です。

var finalObj = json1.concat(json2);
于 2012-04-30T13:55:08.787 に答える
37

最初に登場したとき、「merg」という単語は、JSONオブジェクトを「マージ」するための適切なjQueryの方法である.extendを使用する必要があると考える人を導きます。ただし、$.extend(true, {}, json1, json2);同じキー名を共有するすべての値は、パラメータで指定された最新のものによって上書きされます。あなたの質問のレビューが示すように、これは望ましくありません。

求めているのは、 .concatと呼ばれる単純なjavascript関数です。これは次のように機能します:

var finalObj = json1.concat(json2);

これはネイティブのjQuery関数ではありませんが、次のように簡単に将来使用できるようにjQueryライブラリに追加できます。

;(function($) {
    if (!$.concat) {
        $.extend({
            concat: function() {
                return Array.prototype.concat.apply([], arguments);
            }
        });
    }
})(jQuery);

そして、次のように必要に応じて思い出してください。

var finalObj = $.concat(json1, json2);

このタイプの複数の配列オブジェクトに次のように使用することもできます。

var finalObj = $.concat(json1, json2, json3, json4, json5, ....);

そして、本当に必要な場合は、jQueryスタイルで、非常に短くて甘い(縮小化)

;(function(a){a.concat||a.extend({concat:function(){return Array.prototype.concat.apply([],arguments);}})})(jQuery);

;(function($){$.concat||$.extend({concat:function(){return Array.prototype.concat.apply([],arguments);}})})(jQuery);

$(function() {
    var json1 = [{id:1, name: 'xxx'}],
        json2 = [{id:2, name: 'xyz'}],
        json3 = [{id:3, name: 'xyy'}],
        json4 = [{id:4, name: 'xzy'}],
        json5 = [{id:5, name: 'zxy'}];
    
    console.log(Array(10).join('-')+'(json1, json2, json3)'+Array(10).join('-'));
    console.log($.concat(json1, json2, json3));
    console.log(Array(10).join('-')+'(json1, json2, json3, json4, json5)'+Array(10).join('-'));
    console.log($.concat(json1, json2, json3, json4, json5));
    console.log(Array(10).join('-')+'(json4, json1, json2, json5)'+Array(10).join('-'));
    console.log($.concat(json4, json1, json2, json5));
});
center { padding: 3em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<center>See Console Log</center>

jsFiddle

于 2012-04-30T13:54:31.957 に答える
22

マージしてみてください

var finalObj = $.merge(json1, json2);
于 2012-04-30T13:55:54.010 に答える
6

jQueryを使用しているので。jQuery.extend()メソッドはどうですか?

http://api.jquery.com/jQuery.extend/

説明:2つ以上のオブジェクトのコンテンツを最初のオブジェクトにマージします。

于 2012-04-30T13:54:55.090 に答える
4

これは、Es6の新機能を使用して行うことができます。

var json1 = [{id:1, name: 'xxx' , ocupation : 'Doctor' }];

var json2 = [{id:2, name: 'xyz' ,ocupation : 'SE'}];

var combineJsonArray = [...json1 , ...json2];

//output should like this [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
  { id: 2, name: 'xyz', ocupation: 'SE' } ]

または、2つのjson配列の間に余分な文字列などを配置できます。

var json3 = [...json1 ,"test", ...json2];

// output should like this : [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
  'test',
  { id: 2, name: 'xyz', ocupation: 'SE' } ]
于 2017-10-24T10:09:42.073 に答える
1

たぶん、あなたはjavascriptの配列構文を使うことができます:

var finalObj =[json1 , json2]
于 2014-02-27T10:54:19.137 に答える
0

これは、 Lodash _.merge関数を使用して実現できます。

var json1 = [{id:1, name: 'xxx'}];
var json2 = [{id:2, name: 'xyz'}];
var merged = _.merge(_.keyBy(json1, 'id'), _.keyBy(json2, 'id'));
var finalObj = _.values(merged);

console.log(finalObj);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

于 2018-09-04T06:07:54.423 に答える
0

es6を使用している場合は、新しいjsスプレッド演算子を使用できます。

var json1 = [{id:1, name: 'xxx'}]
var json2 = [{id:2, name: 'xyz'}]
var finalObj = [...json1, ...json2]

console.log(finalObj)

于 2018-09-04T06:25:11.940 に答える
-1

jQueryのextendメソッドを使用して、以下のコードを試してください。

var json1 = {"name":"ramesh","age":"12"};

var json2 = {"member":"true"};

document.write(JSON.stringify($.extend(true,{},json1,json2)))
于 2016-07-14T08:49:39.650 に答える
-3
var json1=["Chennai","Bangalore"];
var json2=["TamilNadu","Karanataka"];

finaljson=json1.concat(json2);
于 2017-03-07T11:59:50.803 に答える