たとえば、これを行うことができますか?:
{
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)=>
_
オブジェクトを取得します(新しいオブジェクトが必要な場合は誤った値をとります。引数の順序を自由に変更してください)。
_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)
使用する for of
代わりにループします。
for (let [key, value] of Object.entries(object_name)) {
object_name[key] = 0; // the value that you want to assign
}