He generado un objeto a partir de una matriz 2D.

Y luego, ¿cómo definir una identificación única a través de cada objeto?
"?" en el siguiente código necesita editar.

data = [
  ["a", "b", "c"],
  ["a", "b"]
]

for (i in data) {
    data[i] = data[i].map(c => ({id: ?, char:c}) )
}

console.log(data)

Se supone el siguiente formato de resultado.

[
  0: {
    0:{
      "id": "?",
      "char": "a"
    },
    1:{
      "id": "?",
      "char": "b"
    },
    2:{
      "id": "?",
      "char": "c"
    }
  },

  1: {
    0:{
      "id": "?",
      "char": "a"
    },
    1:{
      "id": "?",
      "char": "b"
    }
  }
]

Pensé iterar, pero parece que necesita aplanar el objeto,
así que no pude usarlo porque no quería cambiar el formato del objeto original.

0
moriaki 14 sep. 2018 a las 12:37

3 respuestas

La mejor respuesta

Puede crear una variable de conteo para hacer la identificación

data = [
  ["a", "b", "c"],
  ["a", "b"]
]
let count = 0;
for (let i in data) {
    data[i] = data[i].map(c => {
        count ++;
      return {id: count, char:c}
    } )
}

console.log(data)
1
Tan Duong 14 sep. 2018 a las 09:41

Debido a que desea objetos en lugar de matrices, no podrá usar .map. Debido a que tiene objetos primarios y objetos anidados, puede usar reduce dos veces:

const data = [
  ["a", "b", "c"],
  ["a", "b"]
];
const output = data.reduce((a, arr, i) => {
  a[i] = arr.reduce((obj, char, j) => {
    obj[j] = { char, id: '?' };
    return obj;
  }, {});
  return a;
}, {});
console.log(output);
1
CertainPerformance 14 sep. 2018 a las 09:41

Puede asignar objetos individuales dentro y asignar las matrices a un objeto. Tome el mismo enfoque para la matriz externa.

var data = [["a", "b", "c"], ["a", "b"]],
    result = Object.assign(
        {},
        data.map(a => Object.assign(
            {},
            a.map(char => ({ id: '?', char }))
        ))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
Nina Scholz 14 sep. 2018 a las 09:41