js数组扁平化

原创 2017年08月12日 21:00:59

参考自JavaScript专题之数组扁平化

数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。

var arr = [1, [2, [3, 4]]];
//扁平化之后:[1,2,3,4];
  • 递归
    循环数组元素,如果还是一个数组,就递归调用该方法
function flatten(arr){
    var res = [];
    for(var i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            res = res.concat(flatten(arr[i]));
        }else{
            res.push(arr[i]);
        }
    }
    return res;
}
  • reduce
    使用reduce来简化代码:
function flatten(arr){
    return arr.reduce(function(prev,item){
        return prev.concat(Array.isArray(item)?flatten(item):item);
    },[]);
}
  • toString
    如果数组的元素都是数字,那么我们可以考虑使用 toString 方法,因为:
    toString会将数组中的数以逗号形式结合起来。
[1, [2, [3, 4]]].toString() // "1,2,3,4"

toString之后再split转成数组,并将其转换回数字:

function flatten(arr){
    return arr.toString().split(',').map(function(item){
        return +item;
    })
}

但是这种场景只适用于数组内全部是数字的情况,因为中间是全部转换为字符串了。

  • ES6扩展运算符
function flatten(arr){
    while(arr.some(item=>Array.isArray(item)){
        arr = [].concat(...arr);
    }
    return arr;
}

由于扩展运算符一次只能展开一层数组:

var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]

因此考虑只要数组中还有数组,就使用扩展运算符展开一次。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[Javascript Practice] 数组扁平化处理

可用方法 var array=[1,[3,[4],[5,[6,7]],8],[9,[10]]]; var newarray=[]; function flat(array,newarr...

JS扁平化数组代码

var arr = ['a', ['b', 'c', ['e', 'f']]]; function flatMerge(arr) {     var rtnArr = []; &...
  • Seryt
  • Seryt
  • 2017-05-05 09:07
  • 399

JavaScript对嵌套数组做扁平化处理

使用JavaScript对嵌套数组做扁平化处理

JSON——Json对象扁平化

一个层级结构很深的json对象如下: /* 0 */ { "_id" : ObjectId("576ca115c2de3628cc10edfe"), "IIid" : "67EE1C0C628...

生物治疗

近年来,随着我国人均寿命的延长,中老年胃癌患者的人数正在逐年增加,成为胃癌发病的主体人群,同时由于中老年人的免疫功能低下,死亡率极高。而一种新的肿瘤治疗方法——生物诊疗技术越来越引起重视。哈医大四院于...

美团前端3轮技术1轮hr面试

一面 你所知道的DOM元素操作方法(获取元素或者操作元素),尽可能多; 你所知道的DOM事件; 冒泡捕获 跨浏览器的事件模型 事件代理 position属性介绍 display属性介绍 BFC,实现方...

[Javascript String Math] String Methods, eval(), Math Methods

1. String Methods(1) 位置chatAt() 从0开始的字符位置, charCodeAt() 结果是字符编码 eg: var str="aiosdjfosa"; str....

嵌套的数组进行扁平化处理

对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。 steamroller([[["a"]], [["b"]]]) 应该返回 ["a", "b"]。 steamrol...

JavaScript:正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)