Luc*_*ann 30 javascript properties key object
我想更新一个看起来像这样的对象:
currentObject = {
someValue : "value",
myObject : {
attribute1 : "foo",
attribute2 : "bar"
}
};
Run Code Online (Sandbox Code Playgroud)
..包含一些包含一些变化的对象,即:
updateObject = {
myObject : {
attribute2 : "hello world"
}
};
Run Code Online (Sandbox Code Playgroud)
最后我想更新currentObject,以便:
currentObject.myObject.attribute2 == "hello world"
Run Code Online (Sandbox Code Playgroud)
这也应该适用于其他对象.作为一种解决方案,我考虑迭代对象并以某种方式处理命名空间.但我想知道是否通过使用像jQuery或原型这样的库来解决这个问题.
blu*_*llu 18
我建议使用underscore.js(或更好,低保真)扩展:
_.extend(目的地,*来源)
将源对象中的所有属性复制到目标对象,然后返回目标对象.它是有序的,因此最后一个源将覆盖先前参数中相同名称的属性.
Run Code Online (Sandbox Code Playgroud)_.extend({name: 'moe'}, {age: 50}); => {name: 'moe', age: 50}
Ber*_*rgi 11
function update(obj/*, …*/) {
for (var i=1; i<arguments.length; i++) {
for (var prop in arguments[i]) {
var val = arguments[i][prop];
if (typeof val == "object") // this also applies to arrays or null!
update(obj[prop], val);
else
obj[prop] = val;
}
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
应该做的诀窍:update(currentObject, updateObject).您可能希望添加一些类型检查,例如Object(obj) === obj仅使用真实对象扩展实际对象,为数组或hasOwnProperty测试使用正确的循环.
| 归档时间: |
|
| 查看次数: |
23783 次 |
| 最近记录: |