Actualmente tengo dos arreglos que recibo de una API que se ve así:

["Array1", "Array1", "Array1"]
["Array2", "Array2", "Array2"]

Quiero agregarles claves para que se vean así:

[{date: "Array1"}, {date: "Array1"}, {date: "Array1"}]
[{data: "Array2"}, {data: "Array2"}, {data: "Array2"}]

Y luego combinarlos para ser esto:

[
  {date: "Array1", data: "Array2"},
  {date: "Array1", data: "Array2"},
  {date: "Array1", data: "Array2"},
]

Creo que obtuve lo que quiero con este código:

var Array1 = ["Array1", "Array1", "Array1"];
var Array2 = ["Array2", "Array2", "Array2"];
var newArray1 = Array1.map((i) => ({
  date: i
}))
var newArray2 = Array2.map((i) => ({
  data: i
}))

var combined = [];
for (var i = 0; i < newArray1.length; i++) {
  combined.push({
    ...newArray1[i],
    ...newArray2[i]
  });
}

console.log(combined);

¿Hay una mejor manera de hacer esto?

0
ldesigns 9 may. 2019 a las 22:29

3 respuestas

La mejor respuesta

Puede asignar Array1 para obtener date, y obtener data de Array2 por índice:

var Array1 = ["Array1", "Array1", "Array1"];
var Array2 = ["Array2", "Array2", "Array2"];

var combined = Array1.map((date, i) => ({
  date,
  data: Array2[i]
}))

console.log(combined)
3
Ori Drori 9 may. 2019 a las 19:32

Puede adoptar un enfoque dinámico con una matriz para las claves y asignar nuevas propiedades tomando un valor del conjunto de resultados o un nuevo objeto.

var data1 = ["Array1", "Array1", "Array1"],
    data2 = ["Array2", "Array2", "Array2"],
    keys = ["date", "data"],
    result = [data1, data2]
        .reduce((r, b, i) => b.map((v, j) => Object.assign(r[j] || {}, { [keys[i]]: v })), []);

console.log(result);
1
Nina Scholz 9 may. 2019 a las 19:41

Puede realizar la combinación dentro de array.map.

La documentación de Array.prototype.map () observa la siguiente sintaxis:

var new_array = arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])

Tenga en cuenta que la función de devolución de llamada puede tomar no solo el valor actual sino también el índice (y la matriz, pero no lo necesita). Puede usar esto para condensar la combinación a lo siguiente:

Array1.map((elem, i) => ({ date: elem, data: Array2[i] }));
1
Mikolaj Figurski 9 may. 2019 a las 19:38