Вопрос по javascript, jquery, json – Объединить два массива json / javascript в один массив

66

У меня есть два массива JSON, как

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

Я хочу, чтобы они слились в один массив

<code>var finalObj = [{id:1, name: 'xxx' ...},{id:2, name: 'xyz' ...}]
</code>

С уважением

@Quentin[ { "id": 1, "name": 6 } ] это нормально, например, JSON Royi Namir
@MurtazaHussain Если ваш код похож на приведенный выше, мой комментарий верен. user1150525
Это не объекты JSON, а только массивы. Quentin
его динамика. поэтому я не могу использовать индекс. Мне нужна функция, которая может объединить n объектов в конечный объект. Murtaza Khursheed Hussain
@ Ройи Намир & # x2014; Нет, вы можете сериализовать массив в JSON, но это просто массив. (Синтаксис объектов внутри массива в любом случае не соответствует стандарту JSON). Quentin

Ваш Ответ

10   ответов
37

что вам нужно использовать.extend, который является правильным способом jQuery для «слияния» Объекты JSON. Тем не мение,$.extend(true, {}, json1, json2); приведет к тому, что все значения с одним и тем же именем ключа будут переопределены последними, указанными в параметрах. Как показывает обзор вашего вопроса, это нежелательно.

То, что вы ищете, это простая функция JavaScript, известная как.concat, Который будет работать как:

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

В чем здесь преимущество jquery? Я думаю, используяconcat Прямо это правильный выбор.
Вы также можете написатьvar finalObj = [].concat(json1, json2, json3, json4, json5, ....); в этом случае
JQuery здесь не имеет значения.
@ Войта Как объясняется для начала. Я просто показал, как расширить jQuery, чтобы включить метод.
21

Вы можете попробовать объединить

var finalObj = $.merge(json1, json2);
То же самое здесь, это работает!
Функция .concat у меня не сработала; это сделал!
2

You can do this using Es 6 new feature :

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' } ]

Или Вы можете поместить дополнительную строку или что-нибудь между двумя массивами json:

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

// output should like this : [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
  'test',
  { id: 2, name: 'xyz', ocupation: 'SE' } ]
Я думаю, что это делает пересечение вместо Союза. Murtaza Khursheed Hussain
именно то, что я хотел, спасибо, парень. :)
Нет, это делает союз2ality.com/2015/01/es6-set-operations.html Вы можете проверить этот Линл
2

Возможно, вы можете использовать синтаксис массива javascript:

var finalObj =[json1 , json2]
Работает отлично. Спасибо. Каким-то образом concat у меня больше не работает, хотя работает около 2 лет. Но этот здесь вместо этого работает. Безумный мир. :)
110

Вы хотитеconcat метод.

var finalObj = json1.concat(json2);
+1 за использование функции ES3.
простой и классный ответ. Спасибо
@kushdilip & # x2014;json1 а такжеjson2 are Массивы! (У каждого есть один член, который является объектом)
5

Так как вы используете JQuery. Как насчет метода jQuery.extend ()?

Http: /, / api.jquery.com/jQuery.extend/

Description: Merge the contents of two or more objects together into the first object.

0

Вы можете использовать новый оператор распространения js, если используете es6:

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

console.log(finalObj)

-1

Попробуйте приведенный ниже код, используя метод расширения jQuery:

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

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

document.write(JSON.stringify($.extend(true,{},json1,json2)))
Ему нужно слитьarrays объектов, ваш ответ не делает этого, вы могли бы разработать / изменить его?
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/[email protected]/lodash.min.js"></script>

-3
var json1=["Chennai","Bangalore"];
var json2=["TamilNadu","Karanataka"];

finaljson=json1.concat(json2);
Если вы хотите выразить благодарность за сообщение, вы можете нажать на стрелку вверх рядом с ним.

Похожие вопросы