数组常用方法、类数组、数组去重

259 阅读2分钟

数组常用方法

es3.0

改变原数组:

var arr = [1,2,3,4,5]
arr.push(2,2,2) //往后增加
arr.pop() //剪切最后一个
arr.unshift(0,0,0) //往前添加
arr.shift() //剪切第一个
arr.reverse() //逆转顺序
arr.splice(1,3,0,0,0) // [1,0,0,0,5]切片,返回截取值。从第1位,截取长度3,然后用后面的参数替代。
arr.splice(1,0,6) // [1,6,2,3,4,5] 不截取,仅在指定位置插入值的情况较多。
arr.sort() //asc码排序
//sort方法可以传自定义函数,实现自己需要的排序
arr.sort(
//系统规则⬇️
//需要两个形参,以冒泡形式比较
//当返回值为负数时,会把前面的数放在前面
//当返回值为正数,会把后面的数放前面。为0则不动
    function(a,b){
        return a - b //升序
        //return b - a 降序
}) 
//给一个有序数组,乱序
arr.sort(function(){
    return Math.random() = 0.5
})

不改变原数组(结果在返回值)

var arr1 = [1,2]
var arr2 = [5,6,7,8]
arr1.toString() //return '1,2' Array重写的toString方法
arr2.slice(2,3) //return [7] 第二位截取到第三位
arr2.slice(1) //return [6,7,8] 从第一位开始截取到最后
arr2.slice() //整个截取,类数组转换成数组时会用到
arr1.join('~') //return '1~2' 用该字符串连接,返回字符串格式
arr2.join('') //return '5678' 传空字符串,相当于数组转成字符串
//字符串的方法 --> split --> 'a-b-c-d'.split('-') --> ['a', 'b', 'c', 'd'] 与join互逆
arr1.concat(arr2) //return [1, 2, 5, 6, 7, 8]  拼接

类数组

类数组虽然类似数组,但却没有数组对象提供的方法和特性。

var obj = {
    //必须数字索引
    '0':'a',
    '1':'b',
    '2':'c',
    'length': 3, //这个必须要有
    'push': Array.prototype.push,
    'slice' : Array.prototype.slice
}
obj.slice() // ['a', 'b', 'c'] 类数组转换成数组
Array.from(obj) //也可以类数组转换成数组
//原理⬇️
//Array.prototype.push = function (target){
//    obj[obj.length] = target;  给length位,也就是最后一位新增
//    obj.length++;   length加一
//}

数组去重

原型链自定义方法

Array.prototype.unique = function(){
    var temp = {}
        arr = []
        len = this.length
    for (var i = 0; i < len; i++){
    //如果temp中没有对应key,就新增,值随意赋;如果有对应key,就会跳过。达到去重的效果。
        if( !temp[this[i]] ){
            temp[this[i]] = 'abc'
            //arr里新增
            arr.push( this[i] )
        }
    }
    return arr
}

使用es6的Set数据结构

const array = [1, 2, 2, 3, 4, 4, 5]; 
const uniqueArray = [...new Set(array)]; 
console.log(uniqueArray); // Output: [1, 2, 3, 4, 5]