Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS数组字符串修补程序名称到数组(对象)_Javascript_Arrays_String_Parsing_Converter - Fatal编程技术网

Javascript JS数组字符串修补程序名称到数组(对象)

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: {

我对js数组有问题。 我的补丁名(字符串)看起来像(“user.joey.friends.0.franc”),我需要“压缩”如下:

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');