У меня есть глубокий массив, поэтому массив с массивами детей, как показано ниже:
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
проекте. Я беспокоюсь о крахе, поэтому я очень осторожен в оптимизации.
Используйте 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);
Используя рекурсию, ее довольно просто :)
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);
Я хочу функцию сглаживания для стилей слияния react-native
слияния. потому что в случае react-native
иногда у вас есть глубокий массив стилей, и очень важно их сгладить.
Но я узнаю react-native
StyleSheet
имеет хорошие и оптимизировано flatten
функции для решения этой проблемы.
Если кто-то прочитал мой вопрос и должен обработать глубинные массивы стиля, используйте ниже код:
const styleJoiner = (...arg) => StyleSheet.flatten(arg);