js数组方法,你记住了吗?

2018.05.21

最近在做项目的时候,感觉很多方法,又不记得了。所以赶紧补一下…

第一部分:数组自身的方法

常用的方法,靠前展示。

  • toString()

作用:调用数组每一项的 toString()方法,返回以逗号分隔的字符串

参数:无

返回值:转化之后的字符串

原数组是否改变:否

let arr = ['a','b','c','d']
let arr1 = arr.toString();
console.log(arr) // ["a", "b", "c", "d"]
console.log(arr1) // a,b,c,d
  • join()

作用:将数组转化为字符串。

参数:分隔符

返回值:拼接之后的字符串

原数组是否改变:否

join()方法,调用每个元素的 toString()方法。并使用指定的分隔符(默认是逗号)进行拼接。
let arr = [1, 2, {name: "zhangsan"}, 3];
let arr1 = arr.join('-');
console.log(arr);//[1, 2, Object, 3]
console.log(arr1) // 1-2-[object Object]-3
  • push()

作用:在数组末尾添加元素

参数:任意参数

返回值:修改后的数组的长度

原数组是否改变:是

let arr = ['a','b','c','d'];
let arr1 = arr.push('11');
console.log(arr) // ["a", "b", "c", "d", "11"]
console.log(arr1) // 5
  • pop()

作用:移除数组末尾的最后一项

参数:无

返回值:移除的那一项

原数组是否改变:是

let arr = ['a','b','c','d'];
let arr1 = arr.pop();
console.log(arr) // ["a", "b", "c"]
console.log(arr1) // d
  • unshift()

作用:在数组开头添加元素

参数:任意

返回值:修改后的数组长度

原数组是否改变:是

let arr = ['a','b','c','d'];
let arr1 = arr.unshift('11');
console.log(arr) // ["11", "a", "b", "c", "d"]
console.log(arr1) // 5
  • shift()

作用:删除数组的第一项

参数:无

返回值:删除的那一项

原数组是否改变:是

let arr = ['a','b','c','d'];
let arr1 = arr.shift();
console.log(arr) // ["b", "c", "d"]
console.log(arr1) // a
  • reverse()

作用:反转数组的顺序

参数:无

返回值:反转顺序之后的数组

原数组是否改变:是

let arr = ['a','b','c','d'];
let arr1 = arr.reverse();
console.log(arr) // ["d", "c", "b", "a"]
console.log(arr1) // ["d", "c", "b", "a"] 
  • concat()

作用:合并数组

参数:任意

返回值:合并之后的数组

原数组是否改变:否

let arr = ['a','b','c','d'];
let arrCopy = arr.concat('e',[1,2,3]);
console.log(arr) // ["a", "b", "c", "d"]
console.log(arrCopy) // ["a", "b", "c", "d", "e", 1, 2, 3]
  • slice()

作用:截取部分数组

参数:起始下标和结束下标

返回值:返回截取的部分数组。不包括结束位置的项。

原数组是否改变:否


let arr1 = arr.slice(1,3)
console.log(arr) // ["a", "b", "c", "d"]
console.log(arr1) // ["b", "c"]
  • splice()

作用:对数组实现:删除、插入、替换 功能。

参数:见下面

返回值:返回的修改过的项

原数组是否改变:是

删除:可以删除任意数量的项,只需指定 2个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项。

插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入46。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入46。

// 删除
let arr = ['a','b','c','d'];
let arrRemoved = arr.splice(0,2);
console.log(arr) // ["c", "d"]
console.log(arrRemoved) // ["a", "b"]

// 插入
let arr = ['a','b','c','d'];
let arrInsert = arr.splice(2,0,4,6);
console.log(arr) // ["a", "b", 4, 6, "c", "d"]
console.log(arrInsert) // []

// 替换
let arr = ['a','b','c','d'];
let arrReplace = arr.splice(2,1,4,6);
console.log(arr) // ["a", "b", 4, 6, "d"]
console.log(arrReplace) // ["c"]
  • indexOf() 和 lastIndexOf()

作用:返回对应项的索引

参数:一个参数或两个参数

返回值:

原数组是否改变:无

indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。 

lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。在比较第一个参数与数组中的每一项时,会使用全等操作符。

let arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); //2
console.log(arr.lastIndexOf(5)); //5
console.log(arr.indexOf(5,2)); //2
console.log(arr.lastIndexOf(5,4)); //2
console.log(arr.indexOf("5")); //-1
console.log(arr) // [1,3,5,7,7,5,3,1]
  • forEach()

作用:对数组中的每一项运行给定的函数。

参数:参数是function函数。函数的参数分别为:值,索引,数组本身

返回值:无 (因此在callback里面加不加return,效果都是一样的)

原数组是否改变:这个不确定。跟运行的回调函数有关。

let arr = [1,2,3,4,5];
let arr1 = arr.forEach(function(item,index,array){
    array[index] = item * 10
})
console.log(arr) //  [10,20,30,40,50]
console.log(arr1) // undefined
  • map()

作用:map就是‘映射’。对数组中的每一项运行给定函数

参数:参数是function函数。函数参数分别是:值,索引,数组本身。

返回值:调用函数之后的结果组成的数组

原数组是否改变:否

let arr = [1,2,3,4,5];
let arr1 = arr.map(function(item,index,array) {
   return item = item * 10
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // [10,20,30,40,50]
  • filter()

作用:‘过滤’。对数组中每一项运行给定的函数。

参数:参数是function函数。函数有三个参数:值,索引,数组本身

返回值:调用函数之后的结果组成的数组。

原数组是否改变:不确定。因为跟运行的函数有关。

let arr = [1,2,3,4,5];
let arr1 = arr.filter(function(item,index) {
   return item > 3
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // [ 4, 5]
  • every()

作用:判断数组中的每一项是否满足条件。

参数:参数是函数function。函数有三个参数:值,索引,数组本身

返回值:数组中的所有项满足条件,才返回 true

原数组是否改变:涉及运行的函数,因此不确定

let arr = [1,2,3,4,5];
let arr1 = arr.every(function(item,index) {
   return item < 10
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // true
  • some()

作用:判断数组中的是否有满足条件的一项。

参数:参数是函数function。函数有三个参数:值,索引,数组本身

返回值:数组中的有一项满足条件,才返回 true

原数组是否改变:涉及运行的函数,因此不确定

let arr = [1,2,3,4,5];
let arr1 = arr.some(function(item,index) {
   return item < 2
})
console.log(arr) // [1, 2, 3, 4, 5]
console.log(arr1) // true
  • reduce() 和 reduceRight()

作用:迭代数组的所有项,然后构建一个最终返回的值。

参数:callback[, initialValue]

返回值:数组迭代之后,整体的迭代结果。

原数组是否改变:涉及运行的函数,因此不确定

reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。

参数说明:
callback迭代函数,有四个参数(prev, cur, index, array)
prev 前一个值,(initialValue || 数组第一项 || 上一次迭代的结果)
cur 当前迭代项
index 当前迭代项索引
array 迭代的原数组
initialValue 迭代的基础值,不传基础值是数组第一项


// 数组求和
let arr = [1, 2, 3];
let sum = arr.reduce((prev, cur, index, array) => {
    return prev + cur;
});
console.log(arr, sum); // [ 1, 2, 3 ] 6

// 传initialValue 基础值的示例
let sum1 = arr.reduce((prev, cur, index, array) => {
    return prev + cur;
}, 10);
// 返回的值是:10+1+2+3
console.log(arr, sum1); // [ 1, 2, 3 ] 16
  • sort()

作用:将数组升序排列

参数:默认无参数 | 接收一个比较函数

返回值:升序之后的数组

原数组是否改变:是

let arr = ['b','c','d','a'];
let arr1 = arr.sort();
console.log(arr); // ["a", "b", "c", "d"]
console.log(arr1) // ["a", "b", "c", "d"]

在排序时,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串,因此会出现以下的这种情况
let array = [13, 24, 51, 3];
let array1 = array.sort();
console.log(array); // [13, 24, 3, 51]
console.log(array1) // [13, 24, 3, 51]

为了解决这个问题:sort方法可以接收一个比较函数。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
array = [13, 24, 51, 3];
console.log(array.sort(compare)); // [3, 13, 24, 51]

如果需要通过比较函数产生降序排序的结果,只要交换比较函数返回的值即可:
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
array = [13, 24, 51, 3];
console.log(array.sort(compare)); // [51, 24, 13, 3]
  • find()

作用:查找数组中第一个符合条件的元素,返回该元素

参数:参数是函数function。函数的三个参数是:值,索引,数组本身。

返回值:符合条件的第一个元素

原数组是否改变:涉及到函数,不确定。

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.find((item, index, array) => {
    return item > 2;
})
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(arr1) // 3
  • findIndex()

作用:查找数组中第一个符合条件的元素的索引。并返回索引。

参数:参数是函数function。函数的三个参数是:值,索引,数组本身。

返回值:符合条件的第一个元素的索引

原数组是否改变:涉及到函数,不确定。

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.findIndex((item, index, array) => {
    return item > 2;
})
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(arr1) // 2

你可能感兴趣的:(javascript)