Я пытаюсь отобразить массив с n-мерными подматрицами. Я посмотрел на глубокую карту, но я не использую никаких объектов. Пример того, что я пытаюсь сделать, это:
deepMap([4,5,[3,4,[2]]], (x) => x+5)
returns [9,10,[8,9,[7]]]
Функция после массива в deepMap может быть любой функцией
const deepMap=(arr, fn) =>{
const stop = arr.length===0;
const tail = arr.slice(1);
const head = arr[0];
const front = head instanceof Array ? [head[0]]: [] ;
const next = fn(front, head);
return stop ? [] : front.concat(deepMap(tail,fn));
}
Как вы применяете функцию к значениям в вложенных массивах, сохраняя весь массив вложенным массивом?
любая помощь очень ценится!
Вы можете сделать следующее в стиле Хаскеллеса;
function deepMap([x,...xs],f){
return x ? [Array.isArray(x) ? deepMap(x,f) : f(x), ...deepMap(xs,f)]
: [];
}
var arr = [4,5,[3,4,[2]]],
res = deepMap(arr, x => x+5);
console.log(res);
Используйте простую рекурсию. Для вложенного массива сопоставьте массив, вызывающий deepMap
рекурсивно. Когда вы достигнете листа, вызовите функцию.
function deepMap(arr, fn) {
return arr instanceof Array ? arr.map(el => deepMap(el, fn)) : fn(arr);
}
console.log(deepMap([4, 5, [3, 4, [2]]], (x) => x + 5));
const deepMap = (arr,fn) =>{ const head = arr instanceof Array ? arr.map((el) => deepMap(el,fn)) : fn(arr); return head; } console.log(deepMap([4,5,[3,4,[2]]], (x) => x+5));
и это сработалоreturn arr instanceof Array ? ... : ...