【发布时间】:2013-09-13 10:20:45
【问题描述】:
我注意到这篇文章有以下相似之处: Dynamic deep setting for a JavaScript object
但是,上面的帖子是基于 javascript 对象的已知结构和深度,而不是真正动态的。真正的动态意味着您对结构没有任何先验知识,只是一个路径和一个替换它的值。我在 JSFiddle 上创建了一个相当不错的用例:
http://jsfiddle.net/kstubs/nJrLp/1/
function Message(message) {
$('result').insert('<div>' + message + '</div>');
}
var obj = {
"array": [1, 2, 3],
"boolean": true,
"null": null,
"number": 123,
"object": {
"a": "b",
"c": "d",
"e": "f",
"complex_array1": [{
"g": "h"
}, {
"bingo": "bongo"
}, {
"x": {
"complex_array2": [{
"h": "i"
}, {
"j": "k"
}, {
"bingo": "bongo"
}, {
"bango": "jango"
}]
}
}]
},
"string": "Hello World"
};
var list = [{
"h": "i"
}, {
"j": "k"
}];
function walk(path,value) {
var a = path.split('.');
var context = obj;
for (i = 0; i < a.size(); i++) {
context = context[a[i]];
}
}
用例:
- 查找 complex_array2
- 将其列表更新为新列表(新数组)
新数组是应该替换complex_array2 列表的数组列表。 javascript 函数 walk 就是这样做的,遍历 javascript 对象直到满足路径条件,然后将值设置为传递给 walk 函数的任何值,但是新值不会保留。
我知道为什么它不会粘住,因为当你走过一个数组类型的对象时,你会丢失指向原始对象的指针。因此,挑战在于 walk javascript 对象,并且不丢失原始对象的上下文。
感谢您的帮助。
卡尔..
【问题讨论】:
-
那么....问题是什么?您真的需要它还是只想挑战 SO 用户?你试过什么?
-
var context = obj, old=obj; ...老[a[i]]="随便"
-
这可能很有趣——我自己对一个略有不同的问题的答案之一——stackoverflow.com/questions/12163160/…
-
是的@AurelioDeRosa 确实需要。我有一个复杂的 javascript 对象,它动态绑定到 Web 表单。该对象作为 Json 字符串存储在文本字段中。
标签: javascript