Quiero convertir una matriz con algunas operaciones en un objeto de clave y valor. Aquí está mi intento:

const config = [ 'key1=value1', 'key2=value2' ];

const configObject = config.map(c => {
  var key = c.split('=')[0];
  var value = c.split('=')[1];
  return  {key:value}
})

console.log('configObject', configObject) // [ { key: 'value1' }, { key: 'value2' } ]

Quiero obtener un objeto de valor clave, en lugar de una matriz sin ningún tipo de bucle de la vieja escuela . Me gusta esto:

{ key: 'value1' , key: 'value2' }
0
moaningalways 2 mar. 2018 a las 23:20

4 respuestas

La mejor respuesta

Use la función reduce.

const config = [ 'key1=value1', 'key2=value2' ];

const configObject = config.reduce((a, c) => {
  var [key, value] = c.split('=');
  return { ...a, ...{[key]: value} };
}, {});

console.log(configObject);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Ele 2 mar. 2018 a las 20:40

Ya casi estás ahí. El idioma que estás buscando es Object.assign(...array-of-objects):

config = [ 'key1=value1', 'key2=value2' ];

configObject = Object.assign(...config.map(c => {
  var key = c.split('=')[0];
  var value = c.split('=')[1];
  return  {[key]:value}
}))

console.log(configObject)

También tenga en cuenta que es [key]:, no solo key:.

Una opción más concisa pero quizás menos legible:

configObject = Object.assign(...config
     .map(c => c.split('='))
     .map(([k, v]) => ({[k]: v})));
1
georg 2 mar. 2018 a las 20:49

Puede asignar los pares clave / valor divididos en un nuevo objeto y recopilarlos todos con Object.assign en un solo objeto.

var array = ['key1=value1', 'key2=value2'],
    object = Object.assign(...array.map(s => (([k, v]) => ({ [k]: v }))(s.split('='))));
    
console.log(object);
1
Nina Scholz 24 mar. 2018 a las 16:19

Deberías usar .reduce en su lugar

const config = [ 'key1=value1', 'key2=value2' ];

var data = config.reduce(
  (acc, el) => {
    acc[el.split("=")[0]] = el.split("=")[1];
    return acc;
  }, {}
);

console.log(data);
2
void 2 mar. 2018 a las 20:23