数组常用方法总结

1.push方法

用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。

   var arr = [1,2,3]
   arr.push(4) //返回添加新元素后的数组长度  这里返回为 4
   arr  // [1,2,3,4] 原数组为[1,2,3] 使用push方法之后arr变为 [1,2,3,4]

2.pop方法

用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组

  var arr = [1,2,3,4,5]
  arr.pop() //pop删除数组的最后一个元素,并返回该元素这里返回的为 5
  arr  //[1,2,3,4] 原数组为 [1,2,3,4,5] 使用pop方法之后变为 [1,2,3,4]

3.shift()方法

用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。

   var arr = [1,2,3,4,5]
   arr.shift() //shift删除数组的第一个元素并返回被删除的元素  这里返回 1
   arr //[2,3,4,5] 原数组[1,2,3,4,5]改变为[2,3,4,5]

4.unshift()方法

用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。

   var arr = ['a','b','c','d','e']
   arr.unshift('f') //unshift方法在数组的第一个位置添加元素,并返回数组的长度 6
   arr // 原数组['a','b','c','d','e']改变为['f','a','b','c','d','e']

5.join()方法

以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。(不改变原数组)

	var a = [1, 2, 3, 4];
	
	a.join(' ') // '1 2 3 4'
	a.join(' | ') // "1 | 2 | 3 | 4"
	a.join() // "1,2,3,4"

6.concat方法

用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。

	['hello'].concat(['world'])
	// ["hello", "world"]
	
	['hello'].concat(['world'], ['!'])
	// ["hello", "world", "!"]
	
	[].concat({a: 1}, {b: 2})
	// [{ a: 1 }, { b: 2 }]
	
	[2].concat({a: 1})
	// [2, {a: 1}]

7.reverse方法

用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。

   var arr = [1,2,3,4,5,6]
   arr.reverse() //[6,5,4,3,2,1]
   arr //原数组[1,2,3,4,5,6]改变为[6,5,4,3,2,1]

8.slice()方法

用于提取目标数组的一部分,返回一个新数组,原数组不变。(它的第一个参数为起始位置(从0开始,会包括在返回的新数组之中),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。)

     var arr = [1,2,3,4,5,6]
     arr.slice(1,3) // [2,3]
     arr //原数组不变仍为[1,2,3,4,5,6]
     //*如果slice()方法的参数是负数,则表示倒数计算的位置。
     var a = ['a', 'b', 'c'];
     a.slice(-2) // ["b", "c"]
	 a.slice(-2, -1) // ["b"]
	 //*如果第一个参数大于等于数组长度,或者第二个参数小于第一个参数,则返回空数组。
	 var a = ['a', 'b', 'c'];
	 a.slice(4) // []
	 a.slice(2, 1) // []
	 //*slice()方法的一个重要应用,是将类似数组的对象转为真正的数组。
	 Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
	 // ['a', 'b']

9.splice()方法

用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice的第一个参数是删除的起始位置(从0开始),第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。

   var arr = [1,2,3,4,5,6]
   arr.splice(0,1) //从第一个开始删除第一项 返回被删除的数组[1]
   arr //[2,3,4,5,6] 原数组改变为被删除后的数组
   //*下面代码除了删除成员,还插入了两个新成员。
   var a = ['a', 'b', 'c', 'd', 'e', 'f'];
   a.splice(4, 2, 1, 2) // ["e", "f"]
   a // ["a", "b", "c", "d", 1, 2]
   //*起始位置如果是负数,就表示从倒数位置开始删除。
   var a = ['a', 'b', 'c', 'd', 'e', 'f'];
   a.splice(-4, 2) // ["c", "d"]
   //*如果只是单纯地插入元素,splice方法的第二个参数可以设为0.
   var a = [1, 1, 1];

   a.splice(1, 0, 2) // []
   a // [1, 2, 1, 1]
   //*如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。
   var a = [1, 2, 3, 4];
   a.splice(2) // [3, 4]
   a // [1, 2]

10.sort方法

对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。

    ['d', 'c', 'b', 'a'].sort()
	// ['a', 'b', 'c', 'd']
	
	[4, 3, 2, 1].sort()
	// [1, 2, 3, 4]
	
	[11, 101].sort()
	// [101, 11]
	
	[10111, 1101, 111].sort()
	// [10111, 1101, 111]
//下面代码中,sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。
 [10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]

11.map()方法

将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

   var arr = [1,2,3,4,5]
   arr.map(item=>item+1)  //[2,3,4,5,6]
   arr //原数组不改变 仍为 [1,2,3,4,5]

12.forEach() 方法

forEach()方法与map()方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach()方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map()方法,否则使用forEach()方法。

    //forEach()的用法与map()方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。
	  function log(element, index, array) {
	  console.log('[' + index + '] = ' + element);
	}
	
	[2, 5, 9].forEach(log);
	// [0] = 2
	// [1] = 5
	// [2] = 9

*注意,forEach()方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for循环。

    var arr = [1, 2, 3];

	for (var i = 0; i < arr.length; i++) {
	  if (arr[i] === 2) break;
	  console.log(arr[i]);
	}
	// 1

*forEach()方法也会跳过数组的空位。

    var log = function (n) {
      console.log(n + 1);
	};
	
	[1, undefined, 2].forEach(log)
	// 2
	// NaN
	// 3
	
	[1, null, 2].forEach(log)
	// 2
	// 1
	// 3
	
	[1, , 2].forEach(log)
	// 2
	// 3

13.filter()方法

用于过滤数组成员,满足条件的成员组成一个新数组返回。

它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

  var arr = [1,2,3,4,5,6]
  arr.filter(item=>item>2) //[3,4,5,6]
  arr // filter方法不改变原数组 [1,2,3,4,5,6]

14.some(),every() 方法

这两个方法类似“断言”(assert),返回一个布尔值,表示判断数组成员是否符合某种条件。

它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。

*some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。

    var arr = [1, 2, 3, 4, 5];
	arr.some(function (elem, index, arr) {
       return elem >= 3;
    }); //代码中,如果数组arr有一个成员大于等于3,some方法就返回true。
    // true

*every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。

    var arr = [1, 2, 3, 4, 5];
	arr.every(function (elem, index, arr) {
	  return elem >= 3;
	}); //代码中,数组arr并非所有成员大于等于3,所以返回false。
	// false

**注意,对于空数组,some方法返回false,every方法返回true,回调函数都不会执行。

    function isEven(x) { return x % 2 === 0 }

	[].some(isEven) // false
	[].every(isEven) // true

15.reduce(),reduceRight() 方法

reduce()方法和reduceRight()方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce()是从左到右处理(从第一个成员到最后一个成员),reduceRight()则是从右到左(从最后一个成员到第一个成员),其他完全一样。

    [1, 2, 3, 4, 5].reduce(function (a, b) {
	  console.log(a, b);
	  return a + b;
	})
	// 1 2
	// 3 3
	// 6 4
	// 10 5
	//最后结果:15

上面代码中,reduce()方法用来求出数组所有成员的和。reduce()的参数是一个函数,数组每个成员都会依次执行这个函数。如果数组有 n 个成员,这个参数函数就会执行 n - 1 次。

  • 第一次执行:a是数组的第一个成员1,b是数组的第二个成员2。
  • 第二次执行:a为上一轮的返回值3,b为第三个成员3。
  • 第三次执行:a为上一轮的返回值6,b为第四个成员4。
  • 第四次执行:a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。
    reduce()方法和reduceRight()方法的第一个参数都是一个函数。该函数接受以下四个参数。

1.累积变量。第一次执行时,默认为数组的第一个成员;以后每次执行时,都是上一轮的返回值。

2.当前变量。第一次执行时,默认为数组的第二个成员;以后每次执行时,都是下一个成员。

3.当前位置。一个整数,表示第二个参数(当前变量)的位置,默认为1。

4.原数组。

这四个参数之中,只有前两个是必须的,后两个则是可选的。

   [1, 2, 3, 4, 5].reduce(function (
	  a,   // 累积变量,必须
	  b,   // 当前变量,必须
	  i,   // 当前位置,可选
	  arr  // 原数组,可选
	) {
	  // ... ...
  • 如果要对累积变量指定初值,可以把它放在reduce()方法和reduceRight()方法的第二个参数。
    [1, 2, 3, 4, 5].reduce(function (a, b) {
     return a + b;
	}, 10);
	// 25
	//上面代码指定参数a的初值为10,所以数组从10开始累加,最终结果为25。注意,这时b是从数组的第一个成员开始遍历,参数函数会执行5次。
  • 建议总是加上第二个参数,这样比较符合直觉,每个数组成员都会依次执行reduce()方法的参数函数。另外,第二个参数可以防止空数组报错。
    function add(prev, cur) {
	  return prev + cur;
	}
	
	[].reduce(add)
	// TypeError: Reduce of empty array with no initial value
	[].reduce(add, 1)
	// 1

16.indexOf(),lastIndexOf()方法

indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。

    var a = ['a', 'b', 'c'];

	a.indexOf('b') // 1
	a.indexOf('y') // -1
	//indexOf方法还可以接受第二个参数,表示搜索的开始位置。
	['a', 'b', 'c'].indexOf('a', 1) // -1  //代码从1号位置开始搜索字符a,结果为-1,表示没有搜索到。

lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

    var a = [2, 5, 9, 2];
	a.lastIndexOf(2) // 3
	a.lastIndexOf(7) // -1
  • 注意,这两个方法不能用来搜索NaN的位置,即它们无法确定数组成员是否包含NaN.(这是因为这两个方法内部,使用严格相等运算符(===)进行比较,而NaN是唯一一个不等于自身的值。)
   [NaN].indexOf(NaN) // -1
   [NaN].lastIndexOf(NaN) // -1

总结:所有对数组进行增加,删除,排序,颠倒的操作都会改变原数组。

参考链接:https://wangdoc.com/javascript/stdlib/array.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值