数组常用方法
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]