[英]Build string from complex nested object values in Javascript
我有以下輸入。
[{ 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.