JavaScript中数组常用方法总结

一.find与findIndex

find方法返回通过测试(函数内判断)的数组的第一个元素的值。

find方法为数组中每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回true,find()返回符合条件的元素,之后的值不会再调用执行函数。
  • 如果没有复合条件的元素返回值,返回undefined。
  • find()对于空数组,函数是不会执行的。
  • find()并没有改变数组的原始值。
  • 以下两种写法都可以。
console.info([11,-12,13,-14,15].find((n) => n < 0));//-12

function getFind(n){
    return n < 0;
}
console.info([11,-12,13,-14,15].find(getFind));//-12

findIndex和find方法非常类似,返回第一个符合条件的数组成员的下标,如果成员都不符合,返回-1。

console.info([11,-12,13,-14,15].findIndex((n) => n < 0));//1

function getFind(n){
    return n < 0;
}
console.info([11,-12,13,-14,15].findIndex(getFind));//1

二.filter

filter()方法创建一个新的数组,新的数组中的元素是通过检查制定数组中符合条件的所有元素。

filter()不会对空数组进行检测。

filter()不会改变原数组。

       console.info([1,1,2,2,3,4,4,4,5,5,5,5,5,6,6,7,8].filter((x,index,self)=>self.indexOf(x) === index));//[1, 2, 3, 4, 5, 6, 7, 8]
function getFilter(x,index,self){
    return self.indexOf(x) === index;
}
console.info([1,1,2,2,3,4,4,4,5,5,5,5,5,6,6,7,8].filter(getFilter));//[1, 2, 3, 4, 5, 6, 7, 8]

三.forEach

调用数组每个元素,并肩匀速传递给回调函数。相当于遍历整个数组,无法break跳出循环,不支持return操作输出,return只用于控制循环是否跳出当前循环。对于空数组不执行回调函数。不修改原来数组。

var ary = [1,2,3,4,5];
var res = ary.forEach(function (item,index,input) {
    input[index] = item*10;
})
console.info(res);//--> undefined; 没有返回值
console.info(ary);//--> 通过数组索引改变了原数组;[10, 20, 30, 40, 50]

四.every和some

every()方法用于检测数组所有元素是否都符合制定条件(通过函数提供)。

  • 如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余元素不会再进行检测。
  • 如果所有元素都满足条件,则返回true。

some()方法用于检测数组中的元素是否满足制定条件(通过函数提供)。

  • 如果有一个元素满足条件,则表达式返回true,剩余元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

some()和every()都不会检测空数组,且不会改变原数组。


console.info([2,4,6,8,10].every(function(value,index,arry){
    return value % 2 == 0;
}))//true
console.info([1,4,6,8,10].every(function(value,index,arry){
    return value % 2 == 0;
}))//false
console.info([1,3,5,8,9].some(function(value,index,arry){
    return value % 2 == 0;
}))//true
console.info([1,3,5,7,9].some(function(value,index,arry){
    return value % 2 == 0;
}))//false

五.map

map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。该方法不会对空数组进行检测,不会改变原始数组。

var data = [1, 2, 3, 4];
 
var arrayOfSquares = data.map(function (item) { //接收新数组
  return item * item;
});
 
alert(arrayOfSquares); // [1, 4, 9, 16]

六.reduce

reduce()方法接受一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce()可以作为一个高阶函数,用于函数的compose。

该方法对于空数组是不会执行回调函数的。

var numbers = [65, 44, 12, 4];
 
function getSum(total, num) {
    return total + num;
}
function myFunction(item) {
    console.info([65, 44, 12, 4].reduce(getSum));
}//125

七.push(),pop(),shift(),unshift()

push()向数组末尾添加一个或多个元素,并返回新的长度。

pop()删除数组最后一个元素并返回删除的元素。

shift()把数组的第一个元素从其中删除,并返回第一个元素的值。

unshift()向数组开头添加一个或多个元素,并返回新的长度。

这四个方法比较常用,比较高级的用法,可以用push()和pop()方法写一个栈,用push()和shift()方法写一个队列。曾今我面试有面试官让我写一段括号匹配的代码,我当时不熟悉这些数组操作的方法,我只想到用字符串去操作,虽然我的思路跟用栈处理是一样的,但是用栈写出来会高大上很多。至于详细写法可以自行百度。很多的。

八.Array.isArray()

判断一个对象是不是数组,返回的值是boolean

九.Array.concat()

将多个数组凭借成一个数组。

let arr1 = [1, 2, 3]
    arr2 = [4, 5]
let arr = arr1.concat(arr2)
console.log(arr)//[1, 2, 3, 4, 5]

十.Array.toString()

将数组转换成字符串

let arr = [1, 2, 3, 4, 5];
let str = arr.toString()
console.log(str)// 1,2,3,4,5

十一.Array.join()

此方法也是将数组转化为字符串,好处是能设置间隔符号。

let arr = [1, 2, 3, 4, 5];
let str1 = arr.toString()
let str2 = arr.toString('##')
let str3 = arr.join('##')
console.info(str1)// 1,2,3,4,5
console.info(str2)// 1,2,3,4,5
console.info(str3)// 1##2##3##4##5

十二.Array.splice(开始位置, 删除的个数,元素)

万能方法,可以实现数组的增删改。不细说了,针对这一个方法网上很多详细讲解。

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.splice(2, 0 'haha')
let arr2 = arr.splice(2, 3)
let arr1 = arr.splice(2, 1 'haha')
console.log(arr1) //[1, 2, 'haha', 3, 4, 5]新增一个元素
console.log(arr2) //[1, 2] 删除三个元素
console.log(arr3) //[1, 2, 'haha', 4, 5] 替换一个元素

十三.slice(数组)

用法:array.slice(start,end)

解释:该方法是对数组进行部分截取,并返回一个数组副本;参数start是截取的开始数组索引,end参数等于你要取的最后一个字符的位置值加上1(可选),当然,该方法也适用于字符串。


//如果不传入参数二,那么将从参数一的索引位置开始截取,一直到数组尾
var a=[1,2,3,4,5,6];
var b=a.slice(0,3);    //[1,2,3]
var c=a.slice(3);       //[4,5,6]
 
//如果两个参数中的任何一个是负数,array.length会和它们相加,试图让它们成为非负数,举例说明:
//当只传入一个参数,且是负数时,length会与参数相加,然后再截取
var a=[1,2,3,4,5,6];
var b=a.slice(-1);    //[6]
 
//当只传入一个参数,是负数时,并且参数的绝对值大于数组length时,会截取整个数组
var a=[1,2,3,4,5,6];
var b=a.slice(-6);    //[1,2,3,4,5,6]
var c=a.slice(-8);    //[1,2,3,4,5,6]
 
//当传入两个参数一正一负时,length也会先于负数相加后,再截取
var a=[1,2,3,4,5,6];
var b=a.slice(2,-3);    //[3]
 
//当传入一个参数,大于length时,将返回一个空数组
var a=[1,2,3,4,5,6];
var b=a.slice(6);  //[]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值