JS数组常用操作【判断类型、最大值、最小值、去重、扁平化等等】

判断是否为数组

一、isArray

let a = [1,2,3,4]

Array.isArray(a) // true

二、installof

let a = [1,2,3,4];

a instanceof  Array // true

三、toString

let a = [1,2,3,4]

Object.prototype.toString.call(a) // string "[object Array]"

求最大最小值

/*非严格模式下*/
let arr = [1,2,3,4,5]
Math.max.apply(null,arr) //5
Math.max.call(null,...arr) //5

去重

去重一般有两种方式:两层循环比较法,这种方法很简单,不展开

第二种是利用Es6中Set()不可重复的特性去重

let a = [1,1,2,2,3,3]
a = [...new Set(a)] // [1,2,3]

数据扁平化

现有如下结构的数组

var arr = [1,[2,[3,4,5]],6]

我们希望得到

var arr = [1,2,3,4,5,6]

方法一:flat函数

<script>
    var arr = [1, [2, [3, 4, 5]], 6]

    //方法一:flat
    var new_arr = arr.flat(3) //该方法返回
    console.log(new_arr)
</script>

flat函数的参数是个数值,表示扁平深度,我们这个数据的深度是3层,所以flat(3)就可以满足要求。值得一提的是flat方法返回的是一个新数组,不会影响到原数组,因此需要一个变量接收返回值。

方法二:闭包递归法

递归应该是最容易想到的方法,实现起来比较简单。如果再加上闭包的特性的话,那就是扩展性比较好的方法了。

//方法二闭包递归:
    var fnc = (function() {
        var new_arr2 = [];

        return function fn(arr) {
            for (let i = 0; i < arr.length; i++) {
                if (Array.isArray(arr[i])) {
                    fn(arr[i])
                } else {
                    new_arr2.push(arr[i])
                }
            }
            return new_arr2
        }

    })()

    var new_arr2 = fnc(arr);
    console.log(new_arr2) //[1, 2, 3, 4, 5, 6]

方法三:reduce递归法

核心思想也是使用递归算法,但是借助了ES6的reduce高阶函数,让代码简洁了不少

//方法三:reduce递归
    var flatten = arr => {
        return arr.reduce((pre, cur) => {
            return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
        }, [])
    }

    var new_arr3 = flatten(arr);
    console.log(new_arr3) //[1, 2, 3, 4, 5, 6]

方法四:字符串操作法

思路:先把数字转成  "1,2,3,4,5,6"  然后使用字符串的split方法得到新数组。具体代码如下:

//方法四,字符串法
    var arr_str = arr.toString().split(',')
    console.log(arr_str) //["1", "2", "3", "4", "5", "6"]

细心的同学已经发现了,使用这种方法返回的全是字符串,在对数据类型敏感的程序中要慎重使用。当然可以使用数组的map方法循环改变数据类型,前提是你要知道你的数据都是数值类型。具体代码如下:

//方法四,字符串法
    var arr_str = arr.toString().split(',')
    console.log(arr_str)//["1", "2", "3", "4", "5", "6"]
    console.log(arr_str.map(item => {return Number(item)})) //[1, 2, 3, 4, 5, 6]

方法五:JSON.stringify法

//方法五,JSON.stringify
    var arr5 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',') 
    console.log(arr5) //["1", "2", "3", "4", "5", "6"]

 可以看到使用这种方法返回的全是字符串,因此有了下面的优化升级版:

//方法五升级版,JSON.stringify
    var arr5 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']')
    console.log(arr5) //[1, 2, 3, 4, 5, 6]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值