Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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中的复杂嵌套对象值生成字符串_Javascript_Recursion - Fatal编程技术网

从Javascript中的复杂嵌套对象值生成字符串

从Javascript中的复杂嵌套对象值生成字符串,javascript,recursion,Javascript,Recursion,我有以下输入 [{ name: 'modules', children: [ { name: 'home', children: [], allowed: true } ], allowed: true }, { name: 'modules', children: [ { name: 'new', children: [], allowed: true }, { name: 'all', c

我有以下输入

    [{ name: 'modules',
       children: [ { name: 'home', children: [], allowed: true } ],
       allowed: true },

     { name: 'modules',
       children: 
         [ { name: 'new', children: [], allowed: true },
           { name: 'all', children: [], allowed: true } ],
       allowed: true },

     { name: 'groups',
       children: 
         [ { name: 'new', children: [], allowed: true },
           { name: 'all', children: [], allowed: true } ],
       allowed: true },

     { name: 'users',
       children: 
         [ { name: 'new', children: [], allowed: true },
           { name: 'all', children: [], allowed: true } ],
       allowed: true },

     { name: 'settings',
       children: 
         [ { name: 'generally', children: [], allowed: true },
           { name: 'personal', children: [], allowed: true } ],
       allowed: true }]
我想从如下值构建字符串:name.children.name.children等等。我需要所有可能的组合。筑巢可能是无止境的。因此可以使用类似“test.test1.test2.test3”的字符串

因此,该示例的最终结果应该是:

'modules.home'
'modules.new'
'modules.all'
'groups.new'
'groups.all'
'users.new'
'users.all'
'settings.generally'
'settings.personal'
我目前的解决方案实际上不起作用。。
实现这一目标的最佳和最高效的解决方案是什么?提前谢谢

您可以使用递归函数,如下所示

function recursiveNamer(currentList, currentNameString, result) {

    var name = currentNameString === "" ? "" : currentNameString + ".";

    currentList.forEach(function(currentObject) {

        if (currentObject.children.length === 0) {

            result.push(name + currentObject.name);

        } else {

            recursiveNamer(currentObject.children, name + currentObject.name, result);

        }

    });

    return result;
}

console.log(recursiveNamer(inputData, "", []));
结果是

[ 'modules.home',
  'modules.new',
  'modules.all',
  'groups.new',
  'groups.all',
  'users.new',
  'users.all',
  'settings.generally',
  'settings.personal' ]
您可以使用循环:

for(var i=0;i<data.length;i++){
    for(var e=0;e<data[i].children.length;e++){
        console.log(data[i].name+'.'+data[i].children[e].name);
    }
}

for(var i=0;i
嵌套可能是无止境的。因此,类似“test.test1.test2.test3”的字符串是可能的。
Yes刚才注意到,我假设它只有1层深