js中Array方法全解

102 阅读3分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

Array

创建方式:

  1. new Arrary( )
  2. [ ]

new Array方式创建数组,如果传入数值参数n,则数组长度为n。 如果传入多个字符串,或数值,则创建相应的数组。因此容易产生错误。

  let a = new Array(3);
  let b = new Array(2, 3, 5, 6);
  console.log(a);//[empty × 3]
  console.log(b);//[2, 3, 5, 6]

注意:使用数组字面量定义数组并不会实际调用Array() 构造函数;

from()和of()方法

from()将类数据转换为数组

of( )将一组参数转换为数组实例

数组空位

for in 遍历空位数组无法识别空位,但数组长度是正确的

 let a = [1, , , 2];
 for (const item in a) {
 console.log(item); // 0  3
 }

for( ) 和for of 都会将空位字符遍历为undefined

 let a = [1, , , 2];
 for (let i = 0; i < a.length; i++) {
 console.log(a[i]);
 }

length

length属性是可以修改的,legth的值决定数组元素的个数。

检测数组

在一个页面中:instanceof

 if (a instanceof Array) {
 •      console.log(true);
 •  } 

在多个页面使用不同框架时:

 if (Array.isArray(a)) {
 console.log(true);
 }

转换方法

valueOf( )返回数组本身,仍然是数组

toString() 返回以逗后隔开每一个元素的字符串

toLocaleString() 返回以逗后隔开每一个元素的字符串

join(相隔符 )返回以相应符号隔开元素的字符串

栈方法

push( )可以传入任意多个参数,在数组的末尾添加值,返回新数组的长度

pop( ) 删除最后一项,并返回这一项

队列方法

shift( )删出第一项,并返回这一项

unshift( )可以传入任意多个参数,在数组的开头添加值,返回新数组的长度

排序方法

sort( )

 //升序排列
 let a = [1, 5, 2, 4, 15];
 function compare(value1, value2) {
     if (value1 < value2) {
         return -1;
     } else if (value1 > value2) {
         return 1
     } else {
         return 0
     }
 }
 a.sort(compare);
 console.log(a); //[1, 2, 4, 5, 15]  升序排列
 //降序排列
 let a = [1, 5, 2, 4, 15];
 ​
 function compare(value1, value2) {
     if (value1 < value2) {
         return 1;
     } else if (value1 > value2) {
         return -1
     } else {
         return 0
     }
 }
 a.sort(compare);
 console.log(a);// [15, 5, 4, 2, 1] 降序排列

比较函数返回值 :大于0,value1排在value2的后面,等于零,不变。小于零,value1应该排在value2的前面。

reverse( ):反转数组

搜索和位置方法

严格相等

indexof( ) 从头匹配相应元素,参数一为要匹配的元素,参数二为从当前下标开始

lastIndexof( ) 从末尾向前匹配相应元素,参数一为要匹配的元素,参数二为从当前下标开始

includes( )es7新增方法 从头匹配是否存在相应元素,参数一为要匹配的元素,参数二为从当前下标开始 ,返回布尔值

注意;匹配的规则为全等(===)

下面的例子中people数组中无法匹配到person对象的原因:对象是引用类型,person对象和people中的第一个元素只是两个对象的值相等,他们是两个不同的对象,而全等对于引用类型来说是指向同一个对象,因此people中匹配person对象是无法匹配到的。

 let person = {
     name: 'nike'
 };
 let people = [{
     name: 'nike'
 }];
 let morepeople = [person];
 console.log(people.indexOf(person)); //-1
 console.log(morepeople.indexOf(person)); //0
 console.log(people.includes(person)); //false
 console.log(morepeople.includes(person)); //true
断言方法

断言函数接受三个参数 :元素,索引 ,数组本身

find( ) 从头开始匹配,匹配到第一个符合的元素之后不在遍历。返回第一个的匹配的元素;

findIndex( ) 从头开始匹配,匹配到第一个符合的元素之后不在遍历。返回第一个的匹配的元素的索引值;

 const people = [{
     name: 'wang1',
     age: 15
 }, {
     name: 'matong',
     age: 23
 }];
 console.log(people.find((element) => element.age > 20)); //{name: 'matong', age: 23}
 console.log(people.findIndex((element) => element.age > 20)); //1
 ​
 let arr = [2, 5, 6, 3, 7, 8];
 arr.find((element, index, array) => {
     console.log(element);
     console.log(index);
     console.log(array);
     return element == 5;
 });
 //输出结果
  2
  0
 (6) [2, 5, 6, 3, 7, 8]
  5
  1
  (6) [2, 5, 6, 3, 7, 8]

迭代方法

every( ) 对数组每一样都运行传入的函数,如果都返回true,则这个方法返回true

some( )对数组每一样都运行传入的函数,只要有一项返回true,则这个方法返回true

filter( )对数组每一样都运行传入的函数,返回true的项组成一个新数组

map( )对数组每一样都运行传入的函数,返回由每次函数调用的结果构成的数组;

foreach( ) 遍历数组,相当于for循环

都可以传入三个参数:数组元素,数组索引,数组本身 所有方法都不改变原来数组

  const numbers = [1, 2, 3, 4, 5, 2, 1];
 let numevery = numbers.every((item, index, array) => item > 1);
 console.log(numevery);
 console.log(numbers.some((item) => item > 2));
 console.log(numbers.filter((item) => item > 2));
 console.log(numbers.map((item) => item * 2));
 console.log(numbers);

结果:

image.png

归并方法

reduce( ) 和reduceRight( )都可以插入两个参数,一是归并函数,而是归并初始值

 const numbers = [1, 2, 3, 4, 5, 2, 1];
  let sum = numbers.reduceRight((prev, cur, index, array) => prev + cur, 0);
 console.log(sum);//18

join()

join() 方法将数组作为字符串返回。

元素将由指定的分隔符分隔。默认分隔符是逗号 (,)。