可变长度javascript表访问
假设我有以下几点:可变长度javascript表访问,javascript,Javascript,假设我有以下几点: strA = "/ItemA/Item1/Item2/" dataA = "A Data" strB = "/ItemA/Item1/Item2/Item3/" dataB = "B Data" table = { "ItemA" : { "Item1" : { "Item2": { "Item3" : { ... } } }
strA = "/ItemA/Item1/Item2/"
dataA = "A Data"
strB = "/ItemA/Item1/Item2/Item3/"
dataB = "B Data"
table = { "ItemA" : {
"Item1" : {
"Item2": {
"Item3" : { ... }
}
}
}
}
该字符串包含表中的项目(即子表键),然后需要将附带的数据存储在其中
假设我可以有一个长度可变的字符串(即可以一直到“Item7”),有没有一种简单的方法来访问该表
迭代循环不起作用(我认为):
stringPartsA=strA.split(“/”)//[“ItemA”、“Item1”、“Item2”](假设我也删除了“”)
对于(var i=0;i
我搜索了一下,找不到类似的问题,想知道是否有解决方案(不修改字符串或表的结构…)
谢谢 我认为您的迭代解决方案大部分都在那里
stringPartsA = strA.split("/");
var currentLevel = table;
for (var i = 0; i < stringPartsA.length; i++){
var token = stringPartsA[i];
if (!token) continue; // handle leading or trailing slashes
currentLevel = currentLevel[token];
}
return currentLevel;
stringPartsA=strA.split(“/”);
var currentLevel=表格;
对于(var i=0;i
这就是你想要的吗?我认为你的迭代解大部分都在那里
stringPartsA = strA.split("/");
var currentLevel = table;
for (var i = 0; i < stringPartsA.length; i++){
var token = stringPartsA[i];
if (!token) continue; // handle leading or trailing slashes
currentLevel = currentLevel[token];
}
return currentLevel;
stringPartsA=strA.split(“/”);
var currentLevel=表格;
对于(var i=0;i
这就是你想要的吗?你想要的是:
var out = table;
strA.split("/").filter(function(el) {
return el !== "";
}).forEach(function(el) {
out = out[el];
});
//out now stores the object you want
说明:
将字符串拆分为按“/”字符拆分的字符串数组split
过滤掉所述数组开头和结尾的空字符串filter
循环经过过滤的数组,并在每个循环处进行更改,以进一步导航到forEach
对象表
- 您想要的是:
var out = table;
strA.split("/").filter(function(el) {
return el !== "";
}).forEach(function(el) {
out = out[el];
});
//out now stores the object you want
说明:
将字符串拆分为按“/”字符拆分的字符串数组split
过滤掉所述数组开头和结尾的空字符串filter
循环经过过滤的数组,并在每个循环处进行更改,以进一步导航到forEach
对象表
ShaneQful的答案很好,但可以进一步简化。代码更少,没有状态
var result = path.split('/').reduce(function (result, key) {
return key ? result[key] : result;
}, table);
注:可以使用破折号或下划线代替本机字母。ShaneQful的答案很好,但可以进一步简化。代码更少,没有状态
var result = path.split('/').reduce(function (result, key) {
return key ? result[key] : result;
}, table);
注意:可以使用短划线或下划线代替本机文字。感谢未解释的下一票,酷酷匿名SOer。感谢未解释的下一票,酷酷匿名SOer。回答得好!我没有考虑只存储一个指向表中我想要的位置的引用,这很有意义!回答得好!我没有考虑只存储一个指向表中我想要的位置的引用,这很有意义!尼克,回答得好!我认为你和Shane的答案非常相似,但看起来Shane比你快了一分钟——无论如何,谢谢!尼克,回答得好!我认为你和Shane的答案非常相似,但看起来Shane比你快了一分钟——无论如何,谢谢!谢谢你的回答!此外,我还没有太多地研究过虚线或下划线。。。有趣的(而且似乎非常有用)库。还有,你说没有州是什么意思?请原谅我的无知……我的意思是,没有外部变量(
out
在ShaneQful的答案中)暴露算法的当前状态。我提议的版本是无状态的。状态通常是你想要避免的事情(参见)。明白-这是一个很好的答案!修改我的代码以使用此。。。谢谢雨果!谢谢你的回答!此外,我还没有太多地研究过虚线或下划线。。。有趣的(而且似乎非常有用)库。还有,你说没有州是什么意思?请原谅我的无知……我的意思是,没有外部变量(out
在ShaneQful的答案中)暴露算法的当前状态。我提议的版本是无状态的。状态通常是你想要避免的事情(参见)。明白-这是一个很好的答案!修改我的代码以使用此。。。谢谢雨果!