首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度阵列上的JavaScript深度扩展算子

深度阵列上的JavaScript深度扩展算子
EN

Stack Overflow用户
提问于 2018-10-15 12:41:49
回答 3查看 353关注 0票数 1

我有一个深数组,因此数组的子数组如下所示:

代码语言:javascript
复制
const deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];

我想在一个平面数组中设置所有的结束子程序,我使用spread operator of ES6,但是它传播得很浅,我不知道如何将它们设置到下面:

代码语言:javascript
复制
const shallowArray = ['1','a','b',2,'4',3,'c',5];

也许递归函数可以做到这一点,但是如何做到呢?它应该是非常优化的,因为我想在react native项目中使用它。我担心崩溃,所以我对优化非常谨慎。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-15 12:43:55

使用Array.prototype.flat将数组扁平化,然后根据需要使用spread操作符。

如果知道深度的数组深度或最大深度大小,请使用以下代码:

代码语言:javascript
复制
const flatArray = deepArray.flat(7); // assume you know depth size is 7

如果您不知道深度,可以使用使用reduce函数的递归方法,请使用以下方法:

代码语言:javascript
复制
 const deepFlatten = arr =>
         arr.reduce(
           (acc, val) =>
             Array.isArray(val) 
               ? acc.concat(deepFlatten(val)) 
               : acc.concat(val),
             []
         );

将上述功能用于平坦的不确定深度:

代码语言:javascript
复制
const flatArray = deepFlatten(deepArray);
票数 3
EN

Stack Overflow用户

发布于 2018-10-15 13:01:14

使用递归,它非常简单:)

代码语言:javascript
复制
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);    

票数 3
EN

Stack Overflow用户

发布于 2018-10-17 18:02:26

我想要一个react-native合并样式的扁平函数。因为在react-native中,有时您有一个深层次的样式数组,因此必须将它们扁平化。

但是我发现react-native StyleSheet有一个很好的优化的flatten函数来处理这个问题。

如果有人读了我的问题,需要处理深层次的样式数组,请使用下面的代码:

代码语言:javascript
复制
const styleJoiner = (...arg) => StyleSheet.flatten(arg);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52817047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档