Tengo dos matrices json como

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

Quiero combinar en una sola matrices

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

Que respecta a

  • su dinámica. por lo que no puedo utilizar el índice. Necesito una función que puede combinar un número n de objetos en el objeto final.
  • Esos no son objetos JSON, acaba de matrices.
  • Si el código es como se muestra arriba, mi comentario es correcto.
  • [ { "id": 1, "name": 6 } ] es normal json, por ejemplo
  • Namir — No, usted podría serialise una matriz a JSON, pero eso es sólo una matriz. (La sintaxis de los objetos dentro de la matriz, no se ajusten a las JSON estándar de todos modos).
  • su sólo una matriz – sí. pero el ejemplo que me dio ( la matriz) es json ( no cadena json representación) ! intente con jsonlint.com – yo no digo que su matriz es válida. pero mi ejemplo de matriz – es perfectlly bien.
  • Estoy hablando de la cuestión, que contiene el código JavaScript y no JSON. El hecho de que JSON puede tener una matriz como su más externa de la estructura de datos es irrelevante.
  • has contestado no a mi array is ( also) json object. es por eso que me respondió. estamos de acuerdo en que.

10 Comentarios

  1. 113

    Desea que el concat método.

    var finalObj = json1.concat(json2);
    • +1 para el uso de un ES3 función.
    • y json2 se matrices! (Cada uno tiene un miembro, que es un objeto)
    • simple y fresco respuesta. Gracias
  2. 37

    Al primer aspecto, la palabra «slide», lo lleva a uno a pensar que usted necesita para utilizar .ampliar, que es la propia de jQuery con forma de «fusionar» objetos JSON. Sin embargo, $.extend(true, {}, json1, json2); hará que todos los valores que comparten el mismo nombre de la clave para ser reemplazado por el más reciente proporcionada en el params. Como en la revisión de su pregunta muestra, esto es indeseable.

    Lo que usted busca es una simple función de javascript conocido como .concat. Que funcionaría como:

    var finalObj = json1.concat(json2);

    Mientras que esto no es un nativo de jQuery función, usted puede fácilmente agregar a la biblioteca de jQuery para el futuro simple uso de la siguiente manera:

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

    Y, a continuación, la recuerdan como deseables como:

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

    También se puede utilizar para varios objetos de la matriz de este tipo con un like:

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

    Y si usted realmente lo desea jQuery estilo y muy corto y dulce (aka record)

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

    JS:

    ;(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));
    });

    CSS:

    center { padding: 3em; }

    HTML:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <center>See Console Log</center>

    jsFiddle

    • ¿Cuál es el beneficio de jquery? Creo que el uso de concat directamente es la elección correcta.
    • Como se explicó, para empezar. Simplemente me mostró cómo extender jQuery para incluir el método.
    • también puede escribir var finalObj = [].concat(json1, json2, json3, json4, json5, ....); en este caso
    • jQuery no proporciona ningún valor aquí.
  3. 21

    Usted podría tratar de combinar

    var finalObj = $.merge(json1, json2);
    • El .función concat no trabajo para mí; esto hizo!
    • Mismo aquí, que esto funciona!
  4. 2

    Usted puede hacer esto utilizando Es de 6 nueva característica :

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

    O Usted puede poner extra de cadena o cualquier cosa entre dos json array :

    var json3 = [...json1 ,"test", ...json2];
    
    //output should like this : [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
      'test',
      { id: 2, name: 'xyz', ocupation: 'SE' } ]
    • Creo que está haciendo la intersección en lugar de la Unión.
    • No hacer de la unión 2ality.com/2015/01/es6-set-operations.html usted puede verificar esto linl
    • exactamente lo que yo quería, gracias hombre.! 🙂
  5. 1

    Tal vez, puede utilizar la sintaxis de array de javascript :

    var finalObj =[json1 , json2]
    • Funciona a la perfección. Gracias. De alguna manera concat no está funcionando para mí ya aunque funciona por cerca de 2 años. Pero este de aquí, en lugar de obras. Mundo de locos. 🙂
  6. 0

    Usted puede lograr esto mediante Lodash _.merge función.

    JS:

    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);

    HTML:

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

  7. 0

    Puede utilizar el nuevo js propagación del operador si el uso de es6:

    JS:

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

  8. -1

    Tratar el siguiente código, usando jQuery extender método:

    var json1 = {"name":"ramesh","age":"12"};
    
    var json2 = {"member":"true"};
    
    document.write(JSON.stringify($.extend(true,{},json1,json2)))
    • Necesitaba combinación de matrices de los objetos, su respuesta no hacerlo, podría usted comentar/modificarlo ?
  9. -3
    var json1=["Chennai","Bangalore"];
    var json2=["TamilNadu","Karanataka"];
    
    finaljson=json1.concat(json2);
    • Si desea dar Gracias en un post usted puede haga clic en la flecha junto a él.

Dejar respuesta

Please enter your comment!
Please enter your name here