javascript - objetos - ¿Se pueden establecer múltiples propiedades dentro de un objeto literal con el mismo valor?
prototype javascript ejemplos (4)
Otra forma de hacer lo mismo es:
var v;
var obj = {
"a": (v = ''some value''),
"b": v,
"c": v
};
Por ejemplo, ¿puedo hacer esto ?:
{
a: b: c: d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
EDITAR: ¿Hay alguna forma en que pueda evitar hacer esto ?:
{
a: 1,
b: 1,
c: 1,
d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
Podrías probar esto. No es el azúcar sintáctico que está buscando (por ejemplo, {a,b,c:1, d:2}
), pero es otra forma de hacerlo, aunque todas estas respuestas son bastante buenas.
(object,fields,value)=>Object.assign(object||{}, ...fields.map(f=>({[f]:value}) ))
Explicación:
(object,fields,value)=>
Toma un objeto (o valor falsey si quieres un nuevo objeto, puedes reorganizar el orden de los argumentos)
Object.assign(object||{},
Devolverá un objeto basado en el object
y mutará el objeto. Para desactivar esto, simplemente agregue un primer argumento literal de objeto como este Object.assign({}, object || {}, ...
...fields.map(f=>({[f]:value}) )
Se extenderá la matriz de campos asignados a objetos como una lista de argumentos adicionales a Object.assign
. [''a'',''b''].map(f=>({[f]:value}) )
dará [{a:value}, {b:value}]
f(...[{a:1},{b:1}])
es como f({a:1},{b:1})
. Object.assign
hace el resto :)
Puede establecer una línea de igualdad entre varias propiedades:
var foo = {};
foo.a = foo.b = foo.c = "Hello";
O simplemente podría crear un método que haga la asignación masiva para usted:
var foo = {
setValue: function( props, value ) {
while ( props.length ) this[ props.pop() ] = value;
}
}
foo.setValue( [ "a", "b", "c" ] , "Foo" );
También podría envolver un cierre si no desea múltiples vars locales. Esta sintaxis parece ser popular (pero fea):
var obj = (function() { var v=''some value''; return { a:v, b:v, c:v }; })();