Оператор глубокого распространения JavaScript на глубоких массивах

1

У меня есть глубокий массив, поэтому массив с массивами детей, как показано ниже:

const deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];

Я хочу, чтобы все конечные дети были в плоском массиве, я использую spread operator с ES6 но он распространяется мелко, я не знаю, как сделать их ниже:

const shallowArray = ['1','a','b',2,'4',3,'c',5];

Может быть, рекурсивная функция может это сделать, но как? он должен быть очень оптимизирован, потому что я хочу использовать его в react native проекте. Я беспокоюсь о крахе, поэтому я очень осторожен в оптимизации.

Теги:

3 ответа

3
Лучший ответ

Используйте Array.prototype.flat, чтобы сгладить массив, а затем используйте оператор распространения по мере необходимости.

Если вы знаете глубину массива или максимальный размер глубины, используйте следующий код:

const flatArray = deepArray.flat(7); // assume you know depth size is 7

Если вы не знаете глубины, вы можете использовать рекурсивный метод, который использует функцию reduce, используйте ниже:

 const deepFlatten = arr =>
         arr.reduce(
           (acc, val) =>
             Array.isArray(val) 
               ? acc.concat(deepFlatten(val)) 
               : acc.concat(val),
             []
         );

Используйте вышеприведенную функцию для плоской неопределенной глубины:

const flatArray = deepFlatten(deepArray);
3

Используя рекурсию, ее довольно просто :)

let deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];
let array = [];
 
function f(d){
    Array.isArray(d)? d.forEach(x=> f(x)) : array.push(d);   
}
    
deepArray.forEach(x=>f(x));
console.log(array);    
    
0

Я хочу функцию сглаживания для стилей слияния react-native слияния. потому что в случае react-native иногда у вас есть глубокий массив стилей, и очень важно их сгладить.

Но я узнаю react-native StyleSheet имеет хорошие и оптимизировано flatten функции для решения этой проблемы.

Если кто-то прочитал мой вопрос и должен обработать глубинные массивы стиля, используйте ниже код:

const styleJoiner = (...arg) => StyleSheet.flatten(arg);

Ещё вопросы

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