Supongamos que tengo el objeto a
const a = { string1: 'prop1', val1: 'value1', string2: 'prop2', val2: 'value2' } entonces puedo instanciar fácilmente un nuevo objeto constante b
const b = { [a['string1']]: a['val1'], [a['string2']]: a['val2'] };lo que resultará en
b = { prop1: 'value1', prop2: 'value2' } Pero, ¿y si en cambio tengo una lista lst
const lst = [['prop1','value1'], ['prop2','value2']] y quiero instanciar b de lst de una manera ordenada? Lo más lejos que llegué fue
const b = {}; for(const tpl of lst){ b[tpl[0]] = tpl[1]; } Pero a mí, que soy un gran fanático de los oneliners, no me gusta mucho este código. Entonces, ¿cómo puedo inicializar rápidamente b de una lista de propiedades?
EDITAR Parece que mi pregunta no se planteó de manera lo suficientemente abstracta. Permítanme volver a aclararlo. Supongamos que tengo la lista l = ['prop1', 'prop2'];
y la función fx(str) { return str.substring(1); } ¿Cómo podría ahora inicializar rápidamente el objeto b de tal manera que
b = { prop1: 'rop1', prop2: 'rop2' } No puedo hacer b= {[l[0]]=fx(l[0]), [l[1]]=fx(l[1])} ya que la lista l se genera dinámicamente y contendrá una cantidad desconocida de variables Entonces, de alguna manera, sería bueno hacer un bucle, por ejemplo, esta sintaxis inexistente
b = { [[for str in l]] : fx(str) }Tiene entradas allí, por lo que puede simplemente:
Object.fromEntries(lst)Puedes usar el método .values()
const b = {}; const lst = [ ['prop1', 'value1'], ['prop2', 'value2'], ]; for (const [key, value] of lst.values()) b[key] = value; console.log(b);