2012-05-10 18 views
1

アンダースコアを使用すると、オブジェクトの1つの属性を単に置き換える方法を知っていますか?例えばアンダースコアjsオブジェクト内のアイテムを置き換えます

、私はこれがある場合:

var obj = { 
"id" : 123, 
"date" : 142002020, 
"name" : "somename", 
"active" : 1 
} 

を今、私は0にアクティブに設定します。

私は_.collectを使用して「アクティブ」を確認し、それを更新して新しい変数に戻すことができますが、より良い方法があるように見えます。

ありがとうございます!

+0

解決方法はこれまでにありましたか? – nikjohn

答えて

5

あなたはただobj['active'] = 0ではないので、プロパティを変更するためのアンダースコアは必要ありません。

EDIT

あなたは、ネストされたキーを見つける必要がある場合は、多分あなたは再帰関数を使用することができます。

var obj = { 
    'foo' : { 
     'bar' : { 
     'active' : 1 
     } 
    } 
} 

function replaceKey (obj, key, value) { 
    var _obj = _(obj) 

    _obj.each(function (v, k) { 
     if (k === key) { 
     obj[k] = value 
     } else if (obj[k] === Object(obj[k])) { 
     replaceKey(obj[k], key, value) 
     } 
    }) 

    return _obj; 
} 

console.log('should be active:', obj.foo.bar.active === 1) 
replaceKey(obj, 'active', 0) 
console.log('should not be active:', obj.foo.bar.active === 0) 
+2

おそらく彼らは他の呼び出しでそれを連鎖したいからです。 – georg

+0

申し訳ありませんが、私の例は悪いです。はい、それはうまくいくでしょうが、深く入れ子になって、時に深くて深くて、理想的にはそれがどれほど深いものであってもキーを "見つける"ということはわかりません。 – dzm

関連する問題