判断是否为数组
一、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]