在JavaScript中数组是使用频率最高的数据结构之一。为了方便我们的开发和使用,ECMA委员会为我们修订和扩展了各种数组方法。这些方法有些比较冷门,有些却非常实用。下面为大家介绍一些你平时可能运用比较少的数组方法。
先介绍几个大家比较熟悉的方法:
sort()
sort方法用于对数组元素进行排序,它接受传入一个函数,函数的两个参数代表后一个元素与前一个元素,函数的返回值为比较规则,它会改变原数组的值。
let arr = [4,2,3,8,6,7,5];
arr.sort((a,b)=>{
return a-b >0;
})
console.log(arr); // [2,3,4,5,6,7,8]
这里值得一说的是很多人对sort方法的内部实现原理会有疑问,但这个方法不同浏览器内部实现的算法是不同的。ecma对各个浏览器sort方法的实现没有具体规定,对稳定性也没有要求。firefox2采用了不稳定的堆排序,firefox3采用了稳定的归并排序,ie排序速度较慢,大家猜测使用的是冒泡排序或插入排序,chrome运用了快速排序和插入排序两种算法,效率和稳定性都是最高的。
map()
相信这个方法大家比较熟,他是用来遍历数组的,类似的方法还有forEach()。它们的使用使用方法相同,接收传入一个函数,函数有两个参数,其中第一个参数代表当前遍历到的数组元素,第二个参数代表当前元素下标。他不会改变原数组。
var arr =["a","b","c","d"];
arr.map(function(item,index){
console.log(item,index);
/* 输出内容,forEach用法相同
* a 0
* b 1
* c 2
* d 3
*/
});
forEach的用法与map相同
filter()
用于对数组进行过滤,传入一个函数,函数的返回值代表过滤条件。函数有两个参数分别代表当前元素和下标。它返回一个新数组,不会改变原数组的值。
var arr = [1,2,3,4,5,6,7,8];
arr.filter((item,index)=>{
return item%2 == 0;
});
输出结果 2,4,6,8
every()
返回一个布尔值,只有数组中所有元素都满足给定条件才会返回true,否则返回false.
var arr = [1,2,3,4,5,6,7,8];
arr.every((item,index)=>{
return typeof item == "number";
});
上面输出结果为true
var arr = [1,2,3,4];
arr.every((item,index)=>{
return item%2 == 0;
});
上面输出结果为 false.
some()
与 every方法相反,返回一个布尔值,只要数组中有元素满足给定条件就会返回true,如果都不满足返回 false .
var arr = [1,2,3,4]
arr.some((item,index)=>{
return item %2==0;
})
上面结果返回 true
var arr = [1,2,3,4];
arr.some((item,index)=>{
return item<0;
})
上面结果返回 false
find()
查找数组中第一个满足条件的元素。传入一个函数,只返回数组中首个满足条件的元素。从下标为0开始查找。
var arr = ["a","c",1,"d",2];
arr.find((item,index)=>{
return typeof item == "number";
});
上面输出结果为 1
includes()
用于判断当前数组中是否有某个元素,返回一个布尔值。参数为某个元素值
var arr = ["a","c",1,"d",2];
arr.includes("a");//true
arr.includes(3);// false
相当于 === 匹配,不会隐式对传入的值进行转化。
findIndex()
用于查找满足条件的元素的下标值,传入一个函数,返回下标。
var arr = ["a","c",1,"d",2];
arr.findIndex((item,index)=>{
return item %2 == 0;
});
上面的输出结果为 4
reduce()
接收一个函数,函数有4个参数: 1.上一次的值 2.当前值 3. 当前值的索引 4.数组
[0,1,2,3,4].reduce(function(a,b,2){
return a+b;
})
上面输出结果为 10
fill();
填充数组,传入两个参数。第一个参数表示要填入数组的值,第二个参数表示从第几个元素开始(注意不是下标).
var arr = ["a","c",1,"d",2];
arr.fill("c",2);
console.log(arr);
上面输出结果为 [“a”, “c”, “c”, “c”, “c”] , 它会改变原数组。
当然,还有一些比较冷门,使用并不广泛或者应用已在广泛使用的方法(poush,popo,indexOf等),在此不一一展示。如果大家还想详细了解数组下的方法,可以使用 console.info(Array.prototype) 来查看当前数组原型下都有哪些方法。