Javascript JS数组字符串修补程序名称到数组(对象)
我对js数组有问题。 我的补丁名(字符串)看起来像(“user.joey.friends.0.franc”),我需要“压缩”如下:Javascript JS数组字符串修补程序名称到数组(对象),javascript,arrays,string,parsing,converter,Javascript,Arrays,String,Parsing,Converter,我对js数组有问题。 我的补丁名(字符串)看起来像(“user.joey.friends.0.franc”),我需要“压缩”如下: console.log( parseArray( "user.joey.friends.0.franc" ) ); //Object { user: { joey: { friends: { 0: {
console.log( parseArray( "user.joey.friends.0.franc" ) );
//Object {
user: {
joey: {
friends: {
0: {
franc: 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;
}
函数压缩(str){
var split=str.split('.'),obj={},current=obj,i;
对于(i=0;i
如果你说你有一个引用结构的对象,并且你试图查找字符串“user.joey.friends.0.franc”定义的属性,这是一个相当简单的循环:
函数findProperty(obj,路径){
var steps=path.split(/\./);
var阶跃;
var n;
对于(n=0;n
如果您试图从字符串创建对象,在我找到更好的解决方案之前,我目前正在使用此解决方案(我相信它基于Yahoo的名称空间方法):
函数createObject(){
var a=参数,i,j,d,_this;
var out={};
对于(i=0;i
首先:您处理的是一个JavaScript对象——其中可能有一个数组(取决于您如何处理“0”)。第二,你试过什么?最好的解决方案是递归的——拿一个对象,看看你的键
user
是否在那里。如果没有,请添加密钥。然后,将该对象和下一个键joey
向下传递,一点一点地遍历字符串。您可以对字符串使用split
方法将其拆分。我不知道您在这里尝试执行的操作,但您不能引用点格式的数字,如variable.variable.0.variable
,因为它会将其视为十进制。您必须使用括号,例如variable.variable[0]。variable
您的问题真的不清楚。您是说您有一个对象,其结构与您为a
引用的结构相同,并且您试图查找字符串“user.joey.friends.0.franc”
定义的属性吗?如果是这样,@Jeremy的思路是正确的,但它甚至不必是递归的,它只是一个循环。谢谢你的回答,但我有另一个问题,我有数组的字符串名(“user.joey.friends.0.franc”),我需要将数组名转换为对象(用户:{joey:{..})@Jeremy J Starcher,谢谢你的想法,但是有没有更简单的方法呢?谢谢,就是这样:)谢谢,就是这样:)如果这对你有用的话,我希望你在这个答案上打勾。干杯
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"
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');