如果我忽略对象在层次结构中的深度,如何为对象的字段赋值
How to assign a value to a field of an object if I ignore their depth in the hierarchy?
假设我有一个这样的对象:
obj = {
a: {
aa: 'aa',
ab: 'ab',
ac: {
aca: 'aca',
acb: 'acb'
},
b: 'b',
set: function obj_set(field, value) {
var route = field.split('.');
...
}
}
而且,如您所见,我在此对象中有一个方法,您可以通过该方法为对象赋值。
obj.set('b', 'b2');
obj.set('a.ab', 'ab2');
obj.set('a.ac.acb', 'acb2');
由于我不知道作业的深度,因此我无法使用this['b']
、this['a']['ab']
或this['a']['ac']['acb']
引用该字段。此外,在 JavaScript 中,当您将对象分配给变量时,它会被复制,并且会丢失对原始对象的引用。然后,我不能这样做:
var reference = this;
for (i = 0, length = route.length; i < length; i++) {
reference = reference[route[i]];
}
reference = value;
如何解决这个问题?谢谢。
您需要保存引用的最后一个键,因为最后一个引用可以是基元值而不是对象。
var obj = {
a: {
aa: 'aa',
ab: 'ab',
ac: {
aca: 'aca',
acb: 'acb'
}
},
b: 'b',
set: function (field, value) {
var route = field.split('.'),
key = route.pop();
route.reduce(function (r, k) {
r[k] = r[k] || {};
return r[k];
}, this)[key] = value;
}
};
obj.set('b', 'b2');
obj.set('a.ac.acb', 'acb2');
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
相关文章:
- 如何通过json对象数组为嵌套对象赋值
- 了解 JavaScript 对象赋值的顺序
- Javascript GC 并将对象赋值为 null
- 如何为 JSON 对象赋值
- Jquery对象赋值给变量返回未定义
- 为什么不是't当给这个对象赋值时,它是通过引用传递的
- JavaScript TV4对象赋值,NodeJS
- 给对象赋值.变量动态形成
- 如何在Typescript中把一个空对象赋值给一个对象
- 在作用域之外将对象赋值给let关键字
- Javascript -在对象赋值时不替换对象属性
- 对象赋值上的嵌套解构
- 对象扩展vs.对象赋值
- 将一个新对象赋值给一个以前使用过的变量(TypeError: mangoFruit. JS).showName不是一个函
- JavaScript对象.赋值不能在Date对象上工作
- 扩展运算符相当于对象赋值
- 为什么在本地为全局 JavaScript 对象赋值会有所不同
- 从onclick函数给对象赋值
- 将对象赋值给临时变量
- 将对象赋值给“this”