我的js数组有问题。 我有补丁名称(字符串)看起来像(“user.joey.friends.0.franc”),我需要“压缩”看起来像这样:
console.log( parseArray( "user.joey.friends.0.franc" ) );
//Object {
user: {
joey: {
friends: {
0: {
franc: 1
}
}
}
}
}
任何想法,怎么做?
答案 0 :(得分:1)
这是一种非递归方式,可以帮助你完成大部分工作。
function compress(str) {
var split = str.split('.'), obj = {}, current = obj, i;
for (i = 0; i < split.length; i++){
current[split[i]] = {} ;
current = current[split[i]];
}
return obj;
}
答案 1 :(得分:0)
如果你说你的对象具有你引用的结构,而你正在尝试查找字符串"user.joey.friends.0.franc"
定义的属性,那么这是一个相当简单的循环:{{3} }
function findProperty(obj, path) {
var steps = path.split(/\./);
var step;
var n;
for (n = 0; n < steps.length; ++n) {
step = steps[n];
if (!(step in obj)) {
return undefined;
}
obj = obj[step];
}
return obj;
}
var a = {
user: {
joey: {
friends: {
0: {
franc: 1
}
}
}
}
};
console.log(findProperty(a, "user.joey.friends.0.franc")); // "1"
答案 2 :(得分:0)
如果你正在尝试从字符串创建一个对象,那么这个解决方案就是我目前使用的解决方案,直到找到更好的东西(我相信它基于Yahoo的命名空间方法):
function createObject() {
var a = arguments, i, j, d, _this;
var out = {};
for (i = 0; i < a.length; i = i + 1) {
d = a[i].split('.');
out2 = out;
for (j = 0; j < d.length; j = j + 1) {
out2[d[j]] = out2[d[j]] || {};
out2 = out2[d[j]];
}
}
return out;
}
createObject('user.joey.friends.0.franc');