数组常用的方法
数组在平常的coding中比较常用的数据格式,除此之外,还有字符串和对象,有时间也会来和大家分享!请动动手指关注我吧!
一、创建数组 x=[ ]
var a=["333","999"]; // 直接写在[ ]中
var aa=new Array(4,8,9); // 通过实例传入Array中
var aaa=new Array(5); // 传入的5为array的个数
aaa[0]=6; // 给aaa的第0个赋值为6
console.log(aaa); => [6,,,,,]
console.log(aa); => [4,8,9]
二、 访问数组元素 x.[index]
var a=["333","999"];
var b=a[0]; // 访问数组的第一个元素
var c=a[a.length-1]; // 访问数组的最后一个元素
var f=a["1"]===a[1]; // a["1"]会自动转为数字1
console.log(f); => true
当然,如果我们通过以下方式去访问时,会被解析成连续运算返回最后一个值
console.log([2,3,4,5][1,2]) =>4
数组也是一种特殊的对象,因此我们也可以通过键值对的形式去访问
var arr9 = [];
arr9.say = 'Hello';
console.log(arr9.say) =>Hello
三、遍历数组 x.forEach(function(item,index,array){})
es6写法 forEach((item,index)=>{dosomething.....})
var a=["333","999"];
a.forEach(function (item,index,array) {
console.log(item,index)
}); //333 0 //999 1
四、添加元素到数组的末尾 x.push(...)
var a=["333","999"]; a.push("我是新元素","666");
console.log(a); //["333","999","我是新元素","666"]
console.log(a.push("我","690"),a.length,a); //6,["333","666","我是新元素","666","我","690"]
//返回新数组长度6,会执行一次a.push
五、在末尾删除数组(只能删除1个) x.pop()
var a=["333","999"];
a.pop();
console.log(a); => ["333"]; 返回新数组
console.log( a.pop(),a); =>333 [] 会执行一次a.pop(),返回本次被删除元素
六、删除数组最前面元素 x.shift()
var a=["333","999"];
a.shift();
console.log(a); =>["999"]
console.log( a.shift()); =>"999"
//返回被删除元素,不会执行a.shift()
七、添加到数组的前面(头部) x.unshift("...")
var a=["333","999"];
a.unshift("000","888","777");
console.log(a); => ["000","888","777","333","999"]
console.log(a.unshift("111"),a.length,a); => ["111","000","888","777","333","999"]
//会执行一次a.unshift,返回数组长度,
八、找到某个元素在数组中的索引 indexOf
var a=["333","999"];
var d=a.indexOf("333"); //通过元素查找在当前数组的索引值
console.log(d); =>0
var e=a.indexOf("654"); //如果查不到返回-1
console.log(e); =>-1
九、复制数组 slice() Array.from() [...]
var a=[1,2,8];
var newArray=a.slice();
console.log(newArray); //第一种方法 [1,2,8]
var newArray2=Array.from(a);
console.log(newArray2);//第二种方法 [1,2,8]
var newArray3=[...a];
console.log(newArray3);//第三种方法 [1,2,8]
十、清空数组
两种方法都可以实现,但第二种比较优雅
var arr=[1,2,3,3,4,5]; arr=[]; console.log(arr) //[]
------------------------------------
var arr=[888,99];
arr.length=0;
console.log(arr) //[]
十一、合并数组
var arr=[1]; var arr2=[2]; var arr3=[3]; var arr4=arr.concat(arr2,arr3) console.log(arr4) =>[1,2,3]
---------------------------------------
下面这个方法也可以实现,但只能合并两个数组
var arr1=[1,2,3];
var arr2=[4,5,6];
arr1.push.apply(arr1,arr2);
console.log(arr1);
十二、在数组中找到最大值和最小值
//方法1
var array1 = [1,2,3,4];
var array2 = Math.max.apply(null,array1); //最大值
var array3 = Math.min.apply(null,array1); // 最小值
console.log(array2,array3); // =>4 ,1
//方法2
var array4 =Math.max(...array1); //最大值
var array5 =Math.min(...array1); //最小值
console.log(array4,array5); //=>4 ,1
十三、判断是不是数组
在javascript中,如何判断一个变量是否是数组
(1)Array.isArray()方法
var a = [0, 1, 2];
console.log(Array.isArray(a)); // true
(2)typeof toString 方法
由于低版本的IE不支持ES5,如需要兼容,用typeof,我们都知道,数组是特殊的对象,所以数组的typeof结果也是object,而因为null的结果也是object,所以需要加判断
是 object 同时排除 null、排除纯对象,先判断a是不是object,并且a!==null, 并且toString.call判断a等于 [object Array]
var a = [0, 1, 2];
console.log( typeof a ==='object' && a !==null && Object.prototype.toString.call(a) ==='[object Array]'); => true
十四、数组与其他值的运算(使用"+"会自动转为string "-"会自动转为number)
数组和任何值相加都会将数组转换成字符串再进行拼接
console.log([1,2,3] + 6) ; => "1,2,36"
console.log([1,2,3] + {}) ; =>"1,2,3[object Object]"
console.log([1,2,3] + [1,2,3]); =>"1,2,31,2,3"
如果数组只有一个值,那么当这个数组和其他值相减相乘等时会被转换为数字,如果为空会被转换为0
console.log([5] - 2) =>3
十五、数组去重
ES6新增的Set数据结构,类似于数组,但是里面的元素都是唯一的 ,其构造函数可以接受一个数组作为参数
let arr1=[1,2,1,2,6,3,5,69,66,7,2,1,4,3,6,8,9663,8]
let set = new Set(arr1);
console.log(set) =>{1,2,6,3,5,69,66,7,4,8,9663,8]
ES6中Array新增了一个静态方法from,可以把类似数组的对象转换为数组
var arr=[1,2,1,2,6,3,5,69,66,7,2,1,4,3,6,8,9663,8]
console.log(Array.from( new Set(arr))) =>{1,2,6,3,5,69,66,7,4,8,9663,8]
函数去重:
function removeRepeatArray(arr){ return Array.from(new Set(arr)) } console.log(removeRepeatArray([1,5,9,8,6,2,5,1,2,5,8,65,3,5,5,2,2,5]))
=>[1, 5, 9, 8, 6, 2, 65, 3]