【发布时间】:2015-06-24 12:50:59
【问题描述】:
我有一个多维数组,代表一个可能无限的深层类别树菜单,如下所示
this.tree = [{
"title": "1. dragon-breath",
"items": []
}, {
"title": "2. moiré-vision",
"items": [{
"title": "2.1. tofu-animation",
"items": [{
"title": "2.1.1. spooky-giraffe",
"items": []
}, {
"title": "2.1.2. bubble-burst",
"items": []
}],
}, {
"title": "2.2. barehand-atomsplitting",
"items": []
}],
}, {
"title": "3. unicorn-zapper",
"items": []
}, {
"title": "4. romantic-transclusion",
"items": []
}];
然后我有一个指向树叶的数组路径,它会随时间动态变化,看起来像这样
var path = [0]
下次可以这样
var path = [1][1]
或者这个
var path = [1][0][1]
现在我需要改变这条路径所代表的leave的title属性。我找不到任何体面的方法来做到这一点。唯一让我想到的是 eval 函数,
eval('tree'+getStringPathByArrayPath([1,0,1])+'.name = "'+updatedName+'"')
我觉得有点邪恶,而且我使用这个函数作为 angular ng-model (getter/setter),所以我不希望浏览器一遍又一遍地评估这个。
有什么不错的方法可以解决这个问题,还是我对这个问题有不好的方法?
PS:我不能只递归地遍历路径数组并逐个节点地到达正确的树,因为没有通过引用传递,每次我将一个子节点分配给变量时,我都会得到一份副本(但我需要改变原来的)。
感谢您的宝贵时间。
【问题讨论】:
-
不,路径不能这样。
-
查看一些在 jsfiddle 中运行的代码会有所帮助。
-
@theonlygusti 你能解释一下原因吗?
-
对不起,我的错 - 路径实际上看起来像 [0] 或 [1,1] 或 [1,0,1]
标签: javascript angularjs multidimensional-array