添加/移除数组元素

  • arr.push(item1,item2,item3….) —— 从尾端添加元素
  • arr.pop() —— 从尾端删除最后个元素,并返回该删除元素,改变原数组
  • arr.shift() —— 从首端删除第一元素,并返回该删除元素,改变原数组
  • arr.unshift(item1,item2,item3….) —— 从首端添加元素。

splice

arr.splice(start, deleteCount, elem1, …, elemN)—— 它从索引 start 开始修改 arr:删除 deleteCount 个元素并在当前位置插入 elem1, …, elemN。最后返回已被删除元素的数组,改变原数组

  1. //删除
  2. let arr = ["I", "study", "JavaScript"];
  3. arr.splice(1, 1); // 从索引 1 开始删除 1 个元素
  4. alert( arr ); // ["I", "JavaScript"]
  5. // 插入
  6. let arr = ["I", "study", "JavaScript", "right", "now"];
  7. arr.splice(0, 3, "Let's", "dance");//从索引0开始,删除3个元素,并插入新元素
  8. alert( arr ) // ["Let's", "dance", "right", "now"]
  9. //将 deleteCount 设置为 0,splice 方法就能够插入元素而不用删除任何元素:
  10. let arr = ["I", "study", "JavaScript"];
  11. // 从索引 2 开始, 删除 0 个元素,然后插入 "complex" 和 "language"
  12. arr.splice(2, 0, "complex", "language");
  13. //负向索引,它们从数组末尾计算位置
  14. let arr = [1, 2, 5];
  15. // 从索引 -1(尾端前一位),删除 0 个元素,然后插入 3 和 4
  16. arr.splice(-1, 0, 3, 4);
  17. alert( arr ); // 1,2,3,4,5

slice(功能强大)

语法:arr.slice(start,end)
介绍:它会返回一个新数组,将所有从索引 start 到 end(不包括 end)的数组项复制到一个新的数组。start 和 end 都可以是负数,在这种情况下,从末尾计算索引。

  1. let arr = ["t", "e", "s", "t"];
  2. alert( arr.slice(1, 3) ); // e,s(复制从位置 1 到位置 3 的元素)
  3. alert( arr.slice(-2) ); // s,t(复制从位置 -2 到尾端的元素)

concat

语法:arr.concat(arg1, arg2…)
介绍:创建一个新数组,其中包含来自于其他数组和其他项的值。它接受任意数量的参数 —— 数组或值都可以。

  1. let arr = [1, 2];
  2. alert( arr.concat([3, 4]) ); // 1,2,3,4
  3. alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
  4. alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6
  5. //通常,它只复制数组中的元素。其他对象会被作为一个整体添加
  6. let arrayLike = {
  7. 0: "something",
  8. length: 1
  9. };
  10. alert( arr.concat(arrayLike) ); // 1,2,[object Object]
  11. //如果类似数组的对象具有 Symbol.isConcatSpreadable 属性,那么它就会被 concat 当作一个数组来处理
  12. let arrayLike = {
  13. 0: "something",
  14. 1: "else",
  15. [Symbol.isConcatSpreadable]: true,
  16. length: 2
  17. };
  18. alert( arr.concat(arrayLike) ); // 1,2,something,else

遍历

forEach

语法:arr.forEach(function(item, index, array){ // … do something with item} );
介绍:允许为数组的每个元素都运行一个函数

搜索

indexOf/lastIndexOf 和 includes

这3个方法与字符串操作具有相同的语法,并且作用基本上也与字符串的方法相同,只不过这里是对数组元素而不是字符进行操作

  • arr.indexOf(item, from) 从索引 from 开始搜索 item,如果找到则返回索引,否则返回 -1。
  • arr.lastIndexOf(item, from) —— 和上面相同,只是从右向左搜索。
  • arr.includes(item, from) —— 从索引 from 开始搜索 item,如果找到则返回 true(译注:如果没找到,则返回 false)。 ```javascript let arr = [1, 0, false];

alert( arr.indexOf(0) ); // 1 alert( arr.indexOf(false) ); // 2 alert( arr.indexOf(null) ); // -1

alert( arr.includes(1) ); // true

  1. <a name="QZkib"></a>
  2. ### [find 和 findIndex](https://zh.javascript.info/array-methods#find-he-findindex)
  3. find语法:
  4. ```javascript
  5. //形参:item是元素,index是索引,array是数组本身
  6. let result = arr.find(function(item, index, array) {
  7. // 如果返回 true,则返回 item 并停止搜索
  8. // 对于假值(falsy)的情况,则返回 undefined
  9. });

findIndex语法:(与 arr.find 方法)基本上是一样的,但它返回找到元素的索引,而不是元素本身。并且在未找到任何内容时返回 -1。

filter

介绍:返回的是所有匹配元素组成的新数组
语法:

  1. let results = arr.filter(function(item, index, array) {
  2. // 如果 true item 被 push 到 results,迭代继续
  3. // 如果什么都没找到,则返回空数组
  4. });

转换数组:数组转换和重新排序

map

语法:let result = arr.map(function(item, index, array){// 返回新值而不是当前元素})
它对数组的每个元素都调用函数,并返回一个新结果数组

sort(fn)

arr.sort 方法对数组进行 原位(in-place) 排序,更改元素的顺序。(译注:原位是指在此数组内,而非生成一个新数组。)

  1. let arr = [ 1, 2, 15 ];
  2. // 该方法重新排列 arr 的内容
  3. arr.sort();
  4. //默认情况下被按字符串进行排序
  5. alert( arr ); // 1, 15, 2
  6. //要使用自己的排序顺序,需要提供一个函数作为 arr.sort() 的参数。
  7. 数字:arr.sort(function(a, b) { return a - b; });
  8. 字符串:['steh', 'Ana', 'Vim'].sort( (a, b) => a.localeCompare(b) ) )

reverse

用于颠倒 arr 中元素的顺序。

  1. let arr = [1, 2, 3, 4, 5];
  2. arr.reverse();
  3. alert( arr ); // 5,4,3,2,1

split 和 join

str.split(delim,len),它通过给定的分隔符 delim 将字符串分割成一个数组,可选参数len,是对长度的限制,如果有,额外的元素会被忽略

  1. let arr = 'Bilbo, Gandalf, Nazgul, Saruman'.split(', ', 2);
  2. alert(arr); // Bilbo, Gandalf
  3. //拆分字母
  4. let str = "test";
  5. alert( str.split('') ); // t,e,s,t

arr.join(glue) 与 split 相反。它会在它们之间创建一串由 glue 粘合的 arr 项。

  1. let arr = ['Bilbo', 'Gandalf', 'Nazgul'];
  2. let str = arr.join(';'); // 使用分号 ; 将数组粘合成字符串
  3. alert( str ); // Bilbo;Gandalf;Nazgul

reduce/reduceRight

语法:

  1. let value = arr.reduce(function(accumulator, item, index, array) {
  2. // ...
  3. }, [initial]);
  4. 参数:
  5. accumulator —— 是上一个函数调用的结果,第一次等于 initial(如果提
  6. 供了 initial 的话,没提供则取数组第一个为初始值,从第2个元素开始迭代)。
  7. item —— 当前的数组元素。
  8. index —— 当前索引。
  9. arr —— 数组本身

应用函数时,上一个函数调用的结果将作为第一个参数传递给下一个函数。
因此,第一个参数本质上是累加器,用于存储所有先前执行的组合结果。最后,它成为 reduce 的结果

  1. let arr = [1, 2, 3, 4, 5];
  2. let result = arr.reduce((sum, current) => sum + current, 0);
  3. alert(result); // 15
  4. //没有初始值,那么 reduce 会将数组的第一个元素作为初始值,并从第二个元素开始迭代。
  5. let result = arr.reduce((sum, current) => sum + current, 0);
  6. alert(result); // 15

其他不常用方法

thisArg 参数的值在 func 中变为 this。

例子: let army = { minAge: 18, maxAge: 27, canJoin(user) { return user.age >= this.minAge && user.age < this.maxAge; } };

let users = [ {age: 16}, {age: 20}, {age: 23}, {age: 30} ];

// 找到 army.canJoin 返回 true 的 user let soldiers = users.filter(army.canJoin, army);

alert(soldiers.length); // 2 alert(soldiers[0].age); // 20 alert(soldiers[1].age); // 23 ```