2017-12-22 12 views
2

JavaScriptは配列のためにArray.prototype.fill()メソッドを持っていますが、オブジェクトはどうですか?私たちはこのようなものを持っている場合: オブジェクト型のfill()メソッド

let obj ={ 
    a: true, 
    b: 'Hi Dude', 
    c: 12 
} 

は一つの値ですべてのプロパティを記入し、このようにそれを作るための任意の組み込みの方法がある:

let obj ={ 
    a: 'goodbye Dude', 
    b: 'goodbye Dude', 
    c: 'goodbye Dude' 
} 

は、私は知っているがそれを行うことができますforEach()またはfor...inソリューション私はそれがより良いアプローチで行われることを願っています。

+3

'Object.keys()'と '.forEach()'の間違いは何ですか? – Pointy

+0

そして '{a:{b: 'Hi Dude'}、c:12}' {a: 'さようなら'、c: 'さようなら'} 'や '{a:{b:'さようならデュード '}、c:'さようならデュード '} '? –

+0

@何でも間違っていない、おそらくこれが最適な解決策です。 –

答えて

2

オブジェクトのプロパティが一様ではないため、オブジェクトのプロパティはありません(私たちが知っている配列のインデックスは0からlength - 1になりません)。

しかし、あなたはObject.keysArray#forEach使用して必要なものを実装することができます:矢印機能使用していても短い

Object.keys(theObject).forEach(function(key) { 
    theObject[key] = theValue; 
}); 

Object.keys(theObject).forEach(key => theObject[key] = theValue); 
1

もしオブジェクトがJSONからで万が一を、値はJSON.parseで変更することもできます。

j = '{ "a": true, "b": "Hi Dude", "c": 12 }' 
 

 
o = JSON.parse(j, (k, v) => k === '' ? v : 'goodbye Dude') 
 

 
console.log(o)

1

あなたは元のオブジェクトを変異回避したい場合、あなたはこのようにそれを行うことができます。もちろん

const fill = val => obj => Object.keys(obj).reduce((o, k) => ({...o, [k]: val}), {}) 

const obj = {a: true, b: 'Hi Dude', c: 12} 
fill('goodbye Dude')(obj) //=> {a: 'goodbye Dude', b: 'goodbye Dude', c: 'goodbye Dude'} 
obj //=> {a: true, b: 'Hi Dude', c: 12} 

あなたは(val, obj) => ...に署名を変更し、fill('goodbye Dude', obj)のようにそれを呼び出すが、それはあるかもしれないことができますカレーを持っていると便利です。

関連する問題