例如,我可以做到这一点?:
{
a: b: c: d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
编辑:有一些方法可以让我避免这样做?:
{
a: 1,
b: 1,
c: 1,
d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
例如,我可以做到这一点?:
{
a: b: c: d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
编辑:有一些方法可以让我避免这样做?:
{
a: 1,
b: 1,
c: 1,
d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
您可以设置一个行各种属性之间的平等:
var foo = {};
foo.a = foo.b = foo.c = "Hello";
或者你可以创建一个为你所做的大量分配的方法:
var foo = {
setValue: function( props, value ) {
while ( props.length ) this[ props.pop() ] = value;
}
}
foo.setValue( [ "a", "b", "c" ] , "Foo" );
更新到这一点(在最新的JavaScript能力而言)避免不必要的定义瓦尔:
{
let v;
var obj = {
"a": (v = 'some value'),
"b": v,
"c": v
};
}
这将意味着v
不会块之外定义,但obj
会。
做同样的事情的另一种方法是:
var v;
var obj = {
"a": (v = 'some value'),
"b": v,
"c": v
};
你可以试试这个。 这不是你要找的(如语法糖{a,b,c:1, d:2}
但它是另一种方式来做到这一点,尽管所有这些答案都非常精细。
(object,fields,value)=>Object.assign(object||{}, ...fields.map(f=>({[f]:value}) ))
说明:
(object,fields,value)=>
需要一个对象(或falsey价值,如果你想有一个新的对象,可随时重新安排参数顺序)
Object.assign(object||{},
将返回基于对象object
,它会变异对象。 要禁用它,只需添加的第一个参数对象字面这样Object.assign({}, object || {}, ...
...fields.map(f=>({[f]:value}) )
会蔓延映射到对象作为额外的参数列表的字段数组Object.assign
。 ['a','b'].map(f=>({[f]:value}) )
将得到[{a:value}, {b:value}]
和f(...[{a:1},{b:1}])
是像f({a:1},{b:1})
。 Object.assign
没有休息:)
你可以在一个封闭包装也一样,如果你不想多本地变量。 此语法似乎是流行的(但丑陋的):
var obj = (function() { var v='some value'; return { a:v, b:v, c:v }; })();
还有另一种方法:使用映射功能...
// This will be standard! if (!Object.fromEntries) Object.fromEntries = entries => entries.reduce ((o, [key, value]) => ({ ...o, [key]: value }), {}) const setSameValue = (source, props, value) => ({ ...source, ...Object.fromEntries ( props.map (prop => [prop, value]) ) }) // The important part: do what you want with ease! const output = setSameValue ({}, ['1', '01'], 'string 1') const obj = { x: 1, y: 'hello' } const output2 = setSameValue (obj, ['1', '01'], 'string1') console.log ('output1:', output) console.log ('output2:', output2)