С учетом требования создать вложенный массив или произвольную глубину, где базовая структура данных равна
[0, [1, [2, [3 /* , [N, [N+1, [..]]] */]]]]
или
["a", ["b", ["c", ["d" /* , [N, [N+1, [..]]] */]]]]
, где arr
- экземпляр Array
и и map
экземпляр Map
требует, чтобы каждая глубина отображалась на объект Map
, где
map.get(2) // 2
или
map.get(2) // "c"
получает набор значенийво вложенном массиве с индексом N
, где N
- линейные индексы вложенного массива.
Кроме того, необходимо иметь возможность выполнять
m.set(2, "x")
, чтоприведет к
["a", ["b", ["x", ["d" /* , [N, [N+1, [..]]] */]]]]
удалось создать структуру данных вложенного массива с использованием Array.prototype.map()
и двух дополнительных Array
.
Возможно, отсутствует простая настройка, которую можно сделать длядостичь ожидаемой функциональности.Текущий код выполняет только процедуру m.get(<index>)
.
const treeMap = (tree, props = (!Array.isArray(tree) && typeof tree === "string"
? tree.split` `
: tree), res = [], t = [], m = new Map) => props.map((prop, index) =>
!res.length // first iteration
? res.push(prop, t) && m.set(index, prop) // push first value
: index < props.length-1 // check index
? t.push(prop, t = []) && m.set(index, prop) // `.push()` to `t`, re-declare `t` as `[]`
: t.push(prop) && m.set(index, t[0])) // `.push()` last value `prop` to `t`
&& [res, m] // return `res`
let [arr, map] = treeMap("a b c");
console.log(arr, map);
console.log(map.get(2));
// console.log(treeMap([...Array(3).keys()]));
// [0, [1, [2, [3]]]]
Только после двух попыток было решено запросить решение здесь, вместо того, чтобы сначала просто решить вопрос для себя.В общем, прежде чем задавать вопрос, проверяйте код несколько, если не сотни или тысячи раз.
Как выполнить вышеописанное требование?