gpt4 book ai didi

javascript - 如果我忽略对象在层次结构中的深度,如何为对象的字段赋值?

转载 作者:行者123 更新时间:2023-11-28 06:27:05 25 4
gpt4 key购买 nike

假设我有一个像这样的对象:

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>');

关于javascript - 如果我忽略对象在层次结构中的深度,如何为对象的字段赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35036647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com