отображать необъектные значения во вложенных массивах в javascript

1

Я пытаюсь отобразить массив с 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));

        }

Как вы применяете функцию к значениям в вложенных массивах, сохраняя весь массив вложенным массивом?

любая помощь очень ценится!

Теги:
arrays
multidimensional-array

2 ответа

0

Вы можете сделать следующее в стиле Хаскеллеса;

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);
0

Используйте простую рекурсию. Для вложенного массива сопоставьте массив, вызывающий 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));
  • 0
    спасибо Бармар! Я пытаюсь не использовать операторы if, но это очень помогло мне визуализировать процесс. Я закончил с этим: 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)); и это сработало
  • 0
    Вместо этого вы можете использовать троичную форму: return arr instanceof Array ? ... : ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню