Using Underscorejs, would anyone know how to simply replace one attribute of an object?
For example, if I have this:
var obj = {
"id" : 123,
"date" : 142002020,
"name" : "somename",
"active" : 1
}
Now I want to set active to 0;
I could use _.collect
and check for 'active' then update it and return to a new variable, but it seems like there's a better way, I'm just not seeing it.
Thanks!
Using Underscorejs, would anyone know how to simply replace one attribute of an object?
For example, if I have this:
var obj = {
"id" : 123,
"date" : 142002020,
"name" : "somename",
"active" : 1
}
Now I want to set active to 0;
I could use _.collect
and check for 'active' then update it and return to a new variable, but it seems like there's a better way, I'm just not seeing it.
Thanks!
Share Improve this question asked May 10, 2012 at 20:01 dzmdzm 23.6k51 gold badges152 silver badges229 bronze badges 1- Did you ever find the solution to this? – nikjohn Commented Apr 7, 2016 at 13:10
1 Answer
Reset to default 5Why don't you just obj['active'] = 0
, you don't need underscore for changing an property.
EDIT
If you need to find a nested key maybe you could use a recursive function.
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)