js数组的方法

来源:互联网 发布:萌安安ann微博全数据 编辑:程序博客网 时间:2024/06/06 12:12

js数组的方法大全


一、创建数组的两种方式

通过new 关键字来创建

var arr1 = new Array(); //创建一个空数组var arr2 = new Array(2); // 创建一个包含2项的数组var arr3 = new Array('小明','小兰'); // 创建一个包含2个字符串的数组

通过数组字面量方式

var arr1 = []; //创建一个空数组var arr2 = [2]; // 创建一个包含1项的数组var arr3 = ['小明','小兰']; // 创建一个包含2个字符串的数组

二、判断一个对象是不是数组对象

var arr = [];console.log(arr instanceof Array);console.log(Array.isArray(arr));//ES5新增

三、数组方法

  1. join()
  2. push() & pop()
  3. shift() & unshift()
  4. sort()
  5. reverse()
  6. concat()
  7. splice()
  8. slice()
  9. indexOf() & lastIndexOf() (ES5新增)
  10. forEach() (ES5新增)
  11. map() (ES5新增)
  12. filter() (ES5新增)
  13. some()(ES5新增)
  14. every() (ES5新增)
  15. reduce() & reduceRight() (ES5新增)
  16. ES6新增未来单独记录
*方法详细介绍

1、join()
join(“separator”): 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符。

var arr = [1,2,3];console.log(arr.join("-")); // 1-2-3console.log(arr.join()); // 1,2,3

2、push()和pop()
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

var arr = ['q','w','e'];var res = arr.push(1,2);console.log(res);//5console.log(arr)//["q", "w", "e", 1, 2]var res = arr.pop();console.log(res);//2console.log(arr);//["q", "w", "e", 1]

3、shift()和unshift()
shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

var arr = ['a','b','c'];var res= arr.unshift('d','e');console.log(res); // 5console.log(arr); //["d", "e", "a", "b", "c"]var result= arr.shift();console.log(result); // dconsole.log(arr); // ["e", "a", "b", "c"]

4、sort()
sort() 方法用于对数组的元素进行排序(是按照字符编码的顺序进行排序)。按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。

var arr1 = ['a', 'd', 'c', 'b'];console.log(arr1.sort()); // ["a", "b", "c", "d"]var arr2 = [11, 67, 41, 3];console.log(arr2.sort()); //[11, 3, 41, 67]console.log(arr2); //[11, 3, 41, 67](原数组被改变)

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b

  1. 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  2. 若 a 等于 b,则返回 0。
  3. 若 a 大于 b,则返回一个大于 0 的值
var arr2 = [13, 64, 41, 3];var res = arr2.sort(function(){  return a-b;});console.log(res)//[3, 13, 41, 64]

5、reverse()
reverse()方法反转数组项的顺序。

var arr = [11, 67, 41, 3];console.log(arr.reverse()); //[3, 41, 67, 11]console.log(arr); //[3, 41, 67, 11](原数组改变)

6. concat()
concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。

var arr = [1,2,3,4];var arrConcat = arr.concat(5,[6,7],[8,9]);console.log(arrConcat); //[1, 2, 3, 4, 5, 6, 7, 8, 9]console.log(arr); //[1, 2, 3, 4] (原数组未被修改)

7. splice()
splice() 方法可以从数组中添加、删除还有替换某项,然后返回被删除的项目,该方法会改变原数组
splice(index,howmany,item,item……)

  1. index必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
  2. howmany必需。要删除的项目数量。如果设置为 0,则不会删除项目。
  3. item可选。向数组添加的新项目。
var arr = [1,2,3,4,5,6];var arradd = arr.splice(3,0,'a','b');console.log('在第三项后添加"a","b"两项',arr);//[1, 2, 3, "a", "b", 4, 5, 6]console.log(arradd); //[]var arrdelete = arr.splice(0,2);console.log('删除前两项',arr); //[3, "a", "b", 4, 5, 6]console.log(arrRemoved); //[1,2]var arrreplace = arr.splice(2,1,'替换');console.log('替换第二项开始后面一位',arr); //[3, "a", "替换", 4, 5, 6]console.log(arrreplace ); //["b"]var arrdeback = arr.splice(-2,1,'五');console.log('倒数第二位后一位替换为"五"',arr);console.log(arrdeback);

8. slice()
arrayObject .slice(start,end) 返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

  1. 可使用负值从数组的尾部选取元素。
  2. 如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。
var arr = [1,2,3,4,5,6,7,8];var arrC1 = arr.slice(1);var arrC2 = arr.slice(1,5);var arrC3 = arr.slice(1,-2);var arrC4 = arr.slice(-2,-1);var arrC5 = arr.slice(-4,7);console.log(arr);//[1, 2, 3, 4, 5, 6, 7, 8]console.log('C1',arrC1);//[2, 3, 4, 5, 6, 7, 8]console.log('C2',arrC2);//[2, 3, 4, 5]console.log('C3',arrC3);//[2, 3, 4, 5, 6]console.log('C4',arrC4);//[7]console.log('C5',arrC5);//[5, 6, 7]

9. indexOf() 和 lastIndexOf()
indexOf(searchvalue,fromindex) 方法可返回某个指定的数组项在数组中首次出现的索引值,如果没找到返回-1。
lastIndexOf(searchvalue,fromindex) 方法可返回一个指定的的数组项最后出现的索引值,在一数组中的指定位置从后向前搜索,如果没找到返回-1。

参数searchvalue:必需。规定需检索的数组项。
参数fromindex:可选的整数参数。规定在数组中开始检索的位置。如省略该参数,则将从数组的第一项开始检索。

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

10. forEach()
forEach(function(item, index, arr){..})对数组进行遍历,该方法没有返回值。参数都是function,默认有传参,参数分别为:item遍历的数组项内容;index对应的数组索引,arr数组本身。

var newarr = ['a', 'b', 'c', 'd'];arr.forEach(function(item, index, arr){console.log(x,index,(arr === newarr));});// 输出为:// a 0 true// b 1 true// c 2 true// d 3 true

11. map()
map(function(item){..})数组的每一项按照传进去function的规则“映射”成新的数组,item为数组的每一项
参数function必须要有return值
下面代码是数值项求平方

var arr= [1, 2, 3, 4];var arr1= arr.map(function (item) {  return item * item;});console.log(arr1); // [1, 4, 9, 16]

12. filter()
filter()“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];var arr2 = arr.filter(function(x, index) {    return index % 3 === 0 || x >= 8;}); console.log(arr2); //[1, 4, 7, 8, 9, 10]

13. some()
some()判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。

var arr = [1, 2, 3, 4, 5];var arr2 = arr.some(function(item) {return item < 3;}); console.log(arr2); //truevar arr3 = arr.some(function(item) {return item < 1;}); console.log(arr3); // false

14. every()
every()判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。

var arr = [1, 2, 3, 4, 5];var arr2 = arr.every(function(item) {return item < 10;}); console.log(arr2); //truevar arr3 = arr.every(function(item) {return item < 1;}); console.log(arr3); // false

15. reduce() 和 reduceRight()
reduce(function(){},initialValue);
reduceRight(function(){},initialValue);
这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项,他们都有两个参数:回调函数,初始值(第一次迭代时的prev值)。
这个function()接收4个参数:之前值、当前值、索引值以及数组本身。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项(或者设置的初始值),第二个参数就是数组的第二项。

下面用reduce()实现数组求和,数组一开始加了一个初始值10。

var values = [1,2,3,4,5];var sum = values.reduceRight(function(prev, cur, index, array){return prev + cur;},10);console.log(sum); //25
0 0