У меня есть такой массив:
var folders = [
[1, 0, 'SAV'],
[2, 1, 'OLD'],
[3, 0, 'Working doc'],
[4, 3, 'User'],
[5, 0, 'Documentation'],
[6, 0, 'Specification'],
[7, 6, 'Components'],
[8, 6, 'test'],
[9, 8, 'subtest'],
[10, 9, 'subsubtest']];
Результат должен быть
\SAV
\SAV\OLD
\Working doc
\Working doc\User ect...
Я пытаюсь изменить эту функцию php
function show_menu($parent, $level, $array) {
$html = "";
foreach ($array as $node) {
if ($parent === $node['parentid']) {
for ($i = 0; $i < $level; $i++) {
$html .= "-";
}
$html .= " " . $node['name'] . "<br />";
$html .= show_menu($node['id'], ($node + 1), $array);
}
}
return $html;
}
цель состоит в том, чтобы заменить "-" на полный путь



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете построить объект с идентификатором и их дочерними отношениями, а затем создать пути этих отношений.
function getPathes(relations) {
const
iter = path => ([id, value]) => {
var p = path.concat(value);
result.push(p.join('\\'));
(relations[id] || []).forEach(iter(p));
},
result = [];
relations[0].forEach(iter(['']));
return result;
}
var folders = [[1, 0, 'SAV'], [2, 1, 'OLD'], [3, 0, 'Working doc'], [4, 3, 'User'], [5, 0, 'Documentation'], [6, 0, 'Specification'], [7, 6, 'Components'], [8, 6, 'test'], [9, 8, 'subtest'], [10, 9, 'subsubtest']],
relations = folders.reduce((r, [id, parent, value]) => {
r[parent] = r[parent] || [];
r[parent].push([id, value]);
return r;
}, Object.create(null));
console.info(getPathes(relations));.as-console-wrapper { max-height: 100% !important; top: 0; }Мы можем добиться этого с помощью методов .карта(), .найти() и .заменять(), см. Решение в JavaScript ниже ...
var folders = [
[1, 0, 'SAV'],
[2, 1, 'OLD'],
[3, 0, 'Working doc'],
[4, 3, 'User'],
[5, 0, 'Documentation'],
[6, 0, 'Specification'],
[7, 6, 'Components'],
[8, 6, 'test'],
[9, 8, 'subtest'],
[10, 9, 'subsubtest']
];
function sortFolders(arr) {
return arr.map(folderArr => {
let parentFolder = arr.find(el => el[0] === folderArr[1])
let string = (parentFolder) ?
`/${parentFolder[2]}/${folderArr[2]}` :
`/${folderArr[2]}`
return string.replace(/\/g, '\\');
})
}
sortFolders(folders); // Returns an array with the expected output...
// [
// '/SAV',
// '/SAV/OLD',
// '/Working doc',
// '/Working doc/User',
// '/Documentation',
// '/Specification',
// '/Specification/Components',
// '/Specification/test',
// '/test/subtest',
// '/subtest/subsubtest'
// ]
Большое спасибо за ваш ответ, все работает нормально. небольшая вещь отсутствует для последней папки, полный путь должен быть / Specification / test / subtest и / Specification / test / subtest / subsubtest. Я забыл объяснить это в своем вопросе. Если ты сможешь мне еще раз помочь
Вам нужно решение для javascript или PHP?