Tengo una matriz json como esta:

    [
      {id:1, another_id:1},
      {id:2, another_id:1},
      {id:3, another_id:2}
    ]

¿Es posible dividir esto en matrices json basadas en la clave another_id? En este caso, se deben crear dos matrices json como esta

  jsonArr1 = [
          {id:1, another_id:1},
          {id:2, another_id:1}
        ]

  jsonArr2 = [
          {id:3, another_id:2}
        ]

Another_id variará. Por favor ayuda chicos

0
user7600685 23 feb. 2018 a las 13:29

3 respuestas

La mejor respuesta

Si no sabe cuántas matrices de resultados diferentes tendrá, no intente hacer una variable para cada una de ellas. En su lugar, colóquelos en un objeto, donde cada propiedad del objeto corresponda a un único valor posible de another_id, y el valor para él es la matriz correspondiente.

Puede lograr eso con reduce:

var data = [{id:1, another_id:1},{id:2, another_id:1},{id:3, another_id:2}];

var result = data.reduce( (acc, obj) => {
    acc[obj.another_id] = acc[obj.another_id] || [];
    acc[obj.another_id].push(obj);
    return acc;
}, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
trincot 23 feb. 2018 a las 10:44

Espero que el siguiente código funcione para ti. Como esto creará dos matrices json separadas Arr1 para id y Arr2 para another_id

data = [
      {id:1, another_id:1},
      {id:2, another_id:1},
      {id:3, another_id:2}
    ];
    console.log(data);
    var Arr1 = [];
    var Arr2 = [];
    for(var i in data){     
        Arr1.push(data[i].id);
        Arr2.push(data[i].another_id);
    }
0
Zainul Abideen 23 feb. 2018 a las 10:46

Si desea diferentes variables, puede crear una función que devolverá una matriz filtrada en función del valor pasado. Esto usará Array.filter()

function formatData(check) {
  var data = [{
      id: 1,
      another_id: 1
    },
    {
      id: 2,
      another_id: 1
    },
    {
      id: 3,
      another_id: 2
    }
  ];

  return data.filter(el => el.another_id === check);
}

jsonArr1 = formatData(1);
jsonArr2 = formatData(2);

console.log(jsonArr1);
console.log(jsonArr2);
1
void 23 feb. 2018 a las 10:32