当前位置: 首页 > news >正文

用手机制作动画的app/系统优化方法

用手机制作动画的app,系统优化方法,wordpress导航菜单代码,网站建设基础策划js 将嵌套数组展平的方法一览 2016.10.10 20:41 8669浏览 展平数组 数组中可以嵌套数组,要嵌套多少层都可以,比如[1, 2, [[3], 4]] 这样看起来很不爽,所以我们要把它展开,只留下一层数组: [1, 2, 3, 4] 结果: flat…

js 将嵌套数组展平的方法一览

2016.10.10 20:41 8669浏览

展平数组

数组中可以嵌套数组,要嵌套多少层都可以,比如[1, 2, [[3], 4]]
这样看起来很不爽,所以我们要把它展开,只留下一层数组: [1, 2, 3, 4]

结果:


flatten([1, 2, 3])                // [1, 2, 3]
flatten([1, 2, [3]])              // [1, 2, 3]
flatten([1, 2, [[3], 4]])         // [1, 2, 3, 4]
flatten([1, [2, [[3], [4]]]])     // [1, 2, 3, 4]

方法一:普通方法

function flattenMd(arr){var result=[]function flatten(arr){for (var i = 0; i < arr.length; i++) {if (Array.isArray(arr[i])) {flatten(arr[i]);}else{result.push(arr[i]);}        }}flatten(arr);return result;
}
var arr=[1, [2, 3, [4, 5], 6], 7, 8]
console.log(flattenMd(arr));[ 1, 2, 3, 4, 5, 6, 7, 8 ];

并没有什么好说的

方法二:数组concat方法

传递给concat方法的参数序列中如果包含数组,则会将这个数组的每一项添加到结果数组中,这就使数组的这个方法具有了天然的展开二维数组的能力

function flatten2d(arr) {var result = [];for(var i = 0; i < arr.length; i++) {result = result.concat(arr[i]);}return result;
}

上面的方法还可以进一步简化。我们知道apply方法是可以直接接受数组参数,这样我们连循环迭代都省了。

function flatten2d(arr) {return Array.prototype.concat.apply([], arr);// return [].concat.apply([],arr);
}

但是上述方法只能降低一维。因此我们需要使用迭代:

function flattenMd(arr) {var result = [];for(var i = 0; i < arr.length; i++){if(arr[i] instanceof Array) {result = result.concat(flattenMd(arr[i]));}else {result.push(arr[i]);}}return result;
}
var arr=[1, [2, 3, [4, 5], 6], 7, 8]
console.log(flattenMd(arr));[ 1, 2, 3, 4, 5, 6, 7, 8 ]

还可以使用递归

function flatten(arr) {return arr.reduce(function (plane, toBeFlatten) {return plane.concat(Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten);
}, []);
}

递归的简化版

flatten = function (arr) {return arr.reduce((plane, toBeFlatten) => (plane.concat(Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten)), []);
}

再简化

flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);

方法三:利用ES6的展开符

function flatten(arr) {return [].concat(...arr)
}

但是只能降低一维 因此使用递归

function deepFlatten(arr) {flatten = (arr)=> [].concat(...arr);return flatten(arr.map(x=>Array.isArray(x)? deepFlatten(x): x));
}

方法四:数组join和split方法的结合(只适用于数字数组)

function flattenMd(arr) {return arr.join().split(',');   
}
var arr=['1', [null, 3, [4, 5], {K:1}], undefined, 8]
console.log(flattenMd(arr));//[ '1', '', '3', '4', '5', '[object Object]', '', '8' ]

缺陷:

  • 所有类型的元素都会变成字符串
  • nullundefined会变成空字符串、对象会变成[object Object]
http://www.lbrq.cn/news/969679.html

相关文章:

  • wordpress插件webGL/seo关键词报价查询
  • 可以自己做装修效果图的网站/集合竞价口诀背熟6句
  • 中国物流网站/树枝seo
  • 网站设置在哪里找到/推广app是什么工作
  • 做门户网站的网络公司/天津放心站内优化seo
  • 网站制作的地方/百度建站多少钱
  • 团队网站怎么做/精准营销平台
  • 绥化市建设局网站/朔州网站seo
  • 网站第三方微信登陆怎么做的/安徽网络建站
  • 公司网站建设 阜阳/网站seo具体怎么做?
  • 网站建设和seo讲师要求/百度风云榜电视剧排行榜
  • 做网站放什么/地方网站建设
  • 哪些网站可以接工程做/seo搜索引擎优化知乎
  • WordPress的/seo接单
  • 网站建设公司上海做网站公司排名/网址域名注册信息查询
  • 最专业网站建设公司哪家好/爱站网长尾挖掘工具
  • dreamweaver制作网站教程/seo基础知识
  • 做公众号推送的网站/社群营销活动策划方案
  • 网站 成功案例/成都seo优化
  • 建设建设网站的/广告公司接单软件
  • 做博物馆网站最重要性/东莞百度快速排名优化
  • 做ppt的网站兼职/公司seo是什么职位
  • wordpress 浏览次数/八宿县网站seo优化排名
  • 制作收费网站要花多少钱/郑州网络推广团队
  • 做外贸要建什么网站/搜狗搜索引擎网页
  • 网站开发毕设论文/深圳seo推广
  • 启迪网站建设/海外营销公司
  • 做视频挣钱的网站/网络运营培训课程
  • 用服务器ip做网站/单页网站seo优化
  • 时尚网站欣赏/淘宝直通车推广怎么做
  • 【iOS】消息传递和消息转发
  • React + Mermaid 图表渲染消失问题剖析及 4 种代码级修复方案
  • 深入解析Hadoop:机架感知算法与数据放置策略
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡
  • React 学习(4)
  • Vmware虚拟机使用仅主机模式共享物理网卡访问互联网