Js进阶18-数组方法

js 中数组的方法种类众多,有 ES5 之前版本中存在的,ES5 新增,ES6 新增等;并且数组的方法还有原型方法和从 Object 继承的方法,这里只介绍数组在每个版本中原型上的方法。

速查表

编号方法名对应版本功能原数组是否改变
1concat(data1, data2, ...)ES5合并数组,并返回合并之后的数据n
2join(str)ES5使用分隔符,将数组转为字符串并返回n
3pop()ES5删除最后一位,并返回删除的数据y
4shift()ES5删除第一位,并返回删除的数据y
5unshift(newData1, newData2, ...)ES5在第一位新增一或多个数据,返回新增后的数组长度y
6push(newData1, newData2, ...)ES5在最后一位新增一或多个数据,返回新增后的数组长度y
7reverse()ES5反转数组,返回结果y
8slice(start, end)ES5截取指定位置的数组,并返回n
9sort(callback)ES5排序(字符规则),返回结果y
10splice(start, num, data1, data2, ...)ES5删除指定位置,并替换,返回删除的数据y
11toString()ES5直接转为字符串,并返回n
12valueOf()ES5返回数组对象的原始值n
13indexOf(value, start)ES5查询并返回数据的索引n
14lastIndexOf(value, start)ES5反向查询并返回数据的索引n
15forEach(callback)ES5参数为回调函数,会遍历数组所有的项,回调函数接受三个参数n
16map(callback)ES5同 forEach,同时回调函数返回数据,组成新数组由 map 返回n
17filter(callback)ES5同 forEach,同时回调函数返回布尔值,为 true 的数据组成新数组由 filter 返回n
18every(callback)ES5同 forEach,同时回调函数返回布尔值,全部为true,则every返回 true,否则返回 falsen
19some(callback)ES5同 forEach,同时回调函数返回布尔值,只要有一个为 true,则 some 返回 true,否则返回 falsen
20reduce(callback, initial)ES5归并,同forEach,迭代数组的所有项,并构建一个最终值,由reduce 返回n
21reduceRight(callback, initial)ES5反向归并,同forEach,迭代数组的所有项,并构建一个最终值,由reduceRight 返回n
22find(callback)ES6寻找并返回数组中符合条件的第一个元素的值n
23findIndex(callback)ES6寻找并返回数组中符合条件的第一个元素的索引n
24includes(item, index)ES6判断一个数组是否包含一个指定的值,返回 true 或 falsen
25Array.from(likeObj)ES6将类似数组的对象和可遍历对象转为真正的数组,并返回n
26Array.of(value1, value2, …)ES6将一组值转变为数组,并返回n
27fill(value, start, end)ES6用一个固定值填充一个数组,返回结果y
28copyWithin(index, start, end)ES6从数组的指定位置拷贝元素到数组的另一个指定位置,返回结果n

1. concat(data1, data2, ...)

功能:用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

参数:

  • ...data,可选,要合并的数据。data为数组时,将 data 合并到原数组;data 为具体数据时直接添加到原数组尾部;省略时创建原数组的副本。
var arr1 = [1,2,3]
var arr2 = arr1.concat();
console.log(arr1); // [1,2,3]---原数组
console.log(arr1 === arr2); // false
console.log(arr2); // [1,2,3]---原数组的副本

console.log(arr1.concat("hello","world")); // [1,2,3,"hello","world"]
console.log(arr1.concat(["a","b"],[[3,4],{"name":"admin"}])); // [1,2,3,"a","b",[3,4],{"name":"admin"}]
console.log(arr1); // [1,2,3]---原数组未改变

2. join(str)

功能:根据指定分隔符将数组中的所有元素放入一个字符串,并返回这个字符串。该方法<span 不会改变现有的数组。

参数:

  • str,可选,默认为","号,以传入的字符串作为分隔符。
var arr = [1,2,3];
console.log(arr.join()); // "1,2,3"
console.log(arr.join("-")); // "1-2-3"
console.log(arr); // [1,2,3]---原数组未改变

3. pop()

功能:方法用于删除并返回数组的最后一个元素。

参数:无。

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

4. shift()

功能:方法用于删除并返回数组的第一个元素</span></span>。

参数:无。

var arr = [1,2,3]
console.log(arr.shift()); // 1
console.log(arr); // [2,3]---原数组改变

5. unshift(newData1, newData2, ...)

功能:向数组的开头添加一个或更多元素,并返回新的数组长度。

参数:

  • ...newData:必须,要添加的元素。
var arr = [1,2,3];
console.log(arr.unshift("hello")); // 4
console.log(arr); // ["hello",1,2,3]---原数组改变
console.log(arr.unshift("a","b")); // 6
console.log(arr); // ["a","b","hello",1,2,3]---原数组改变

6. push(newData1, newData2, ...)

功能:向数组的末尾添加一个或更多元素,并返回新的数组长度。

参数:

  • ...newData:必须,要添加的元素。
var arr = [1,2,3];
console.log(arr.push("hello")); // 4
console.log(arr); // [1,2,3,"hello"]---原数组改变
console.log(arr.push("a","b")); // 6
console.log(arr); // [1,2,3,"hello","a","b"]---原数组改变

7. reverse()

功能:反转数组中元素的顺序。

参数:无。

var arr = [1,2,3];
console.log(arr.reverse()); // [3,2,1]
console.log(arr); // [3,2,1]---原数组改变

8. slice(start, end)

功能:可从已有的数组中返回选定的元素。

参数:

  • strat,必须,表示从第几位开始。
  • end,可选,表示到第几位结束(不包含end位),省略表示到最后一位。

start 和end 都可以为负数,负数时表示从后往前数,如 -1 表示最后一位。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.slice(1,3)); // ["Jack","Lucy"]
console.log(arr.slice(1)); // ["Jack","Lucy","Lily","May"]
console.log(arr.slice(-4,-1)); // ["Jack","Lucy","Lily"]
console.log(arr.slice(-2)); // ["Lily","May"]
console.log(arr.slice(1,-2)); // ["Jack","Lucy"]
console.log(arr); // ["Tom","Jack","Lucy","Lily","May"]---原数组未改变

9. sort(callback)

功能:对数组中的元素进行排序,默认是升序。

var arr = [6,1,5,2,3];
console.log(arr.sort()); // [1, 2, 3, 5, 6]
console.log(arr); // [1, 2, 3, 5, 6]---原数组改变

但是在排序前,会先调用数组的 toString 方法,将每个元素都转成字符串之后,再进行排序,此时会按照字典排序,逐位比较,进行排序。

var arr = [6,1024,52,256,369];
console.log(arr.sort()); // [1024, 256, 369, 52, 6]---字典顺序排序
console.log(arr); //[1024, 256, 369, 52, 6]---原数组改变

参数:

  • callback,可选,回调函数。该函数应该具有两个参数,比较这两个参数,然后返回一个用于说明这两个值的相对顺序的数字。其返回值规则如下:
    • 若 a 小于 b,返回一个小于 0 的值。
    • 若 a 等于 b,则返回 0。
    • 若 a 大于 b,则返回一个大于 0 的值。
var arr = [6,1024,52,256,369];
console.log(arr.sort(fn)); // [6, 52, 256, 369, 1024]---数值排序
console.log(arr); // [6, 52, 256, 369, 1024]---原数组改变
function fn(a,b){
  return a - b;
}

10. splice(start, num, data1, data2, ...)

功能:向数组中添加,或从数组删除,或替换数组中的元素,然后返回被删除/替换的元素。

参数::

  • start,可选,开始删除的位置。
  • num,可选,删除的数目。
  • ...data,可选,添加的元素。

(1) 不传参时:无操作。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.splice()); // []
console.log(arr); // ["Tom","Jack","Lucy","Lily","May"]---无操作

(2) 只传入 start:表示删除索引为 start 及 start 之后的所有元素。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.splice(2)); // ["Lucy", "Lily", "May"]---从索引2开始删除后面的所有元素
console.log(arr); // ["Tom", "Jack"]---原数组改变

(3) 传入 start 和 num:表示从索引为 start 的数据开始删除,删除 num 个。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.splice(2,2)); // ["Lucy", "Lily"]---从索引2开始删除2个元素
console.log(arr); // ["Tom", "Jack", "May"]---原数组改变

(4) 传入更多:表示从索引为 start 的数据开始删除,删除 num 个,并将第3个参数及后面所有参数,插入到 start 的位置。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.splice(2,2,"a","b")); // ["Lucy", "Lily"]---从索引2开始删除2个元素,并将"a"和"b"插入到索引2的位置
console.log(arr); // ["Tom", "Jack", "a", "b", "May"]---原数组改变

(5) 添加案例:传入 start、0(num)和多个参数(要添加的值),表示将第3个参数及后面所有参数,插入到 start 的位置。

var arr = ["Tom","Jack","Lucy","Lily","May"];
console.log(arr.splice(2,0,"a","b")); // []
console.log(arr); // ["Tom", "Jack", "a", "b", "Lucy", "Lily", "May"]---原数组改变

(6) 替换案例:传入index(即start)、1(num)和 value(修改后的值),表示修改索引为 index 的元素为 value。

var arr = [1, 2, 3, 4, 5, 6];
console.log(arr.splice(2, 1, 7)); // [3]---将索引2的元素替换为7
console.log(arr); // [1, 2, 7, 4, 5, 6]---原数组改变

11. toString()

功能:转换成字符串,类似于没有参数的 join。该方法会在数据发生隐式类型转换时被自动调用,如果手动调用,就是直接转为字符串。

参数:无。

var arr = [1,2,3];
console.log(arr.toString()); // 1,2,3
console.log(arr); // [1,2,3]---原数组未改变

12. valueOf()

功能:返回数组的原始值(一般情况下其实就是数组自身),一般由 js 在后台调用,并不显式的出现在代码中。

参数:无。

var arr = [1,2,3];
console.log(arr.valueOf()); // [1,2,3]
console.log(arr); // [1,2,3]
//为了证明返回的是数组自身
console.log(arr.valueOf() == arr); // true

13. indexOf(value, start)

功能:根据指定的数据,从左向右,查询在数组中出现的位置,如果不存在指定的数据,返回 -1。该方法是查询方法,不会对现有的数组产生改变。

参数:

  • value,必须,要查询的数据。
  • start,可选,表示开始查询的位置,当 start 为负数时,从数组的尾部向前数。
var arr = ["h","e","l","l","o"];
console.log(arr.indexOf("l")); // 2
console.log(arr.indexOf("l",3)); // 3
console.log(arr.indexOf("l",4)); // -1
console.log(arr.indexOf("l",-1)); // -1
console.log(arr.indexOf("l",-3)); // 2

14. lastIndexOf(value, start)

功能:同 indexOf,查询顺序是从右到左</span></span>。

参数:同 indexOf。

var arr = ["h","e","l","l","o"];
console.log(arr.lastIndexOf("l")); // 3
console.log(arr.lastIndexOf("l",3)); // 3
console.log(arr.lastIndexOf("l",1)); // -1
console.log(arr.lastIndexOf("l",-3)); // 2
console.log(arr.lastIndexOf("l",-4)); // -1

15. forEach(callback)

功能:用来遍历数组,该方法没有返回值。forEach 接收的回调函数会根据数组的每一项执行。

参数:

  • callback,必须。默认有三个参数,分别为 item(遍历到的数组的元素),index(对应的索引),self(数组自身)。
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.forEach(function (value,index,self) {
  console.log(value + "--" + index + "--" + (arr === self));
});
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true
console.log(a); // undefined---forEach没有返回值
// 该方法为遍历方法,不会修改原数组

16. map(callback)

功能:

(1) 同forEach功能;

(2) map的回调函数会将执行结果返回,最后 map 将所有回调函数的返回值组成新数组返回。

参数:

  • callback,必须。默认有三个参数,分别为 item(遍历到的数组的元素),index(对应的索引),self(数组自身)。
// 功能1:同forEach
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.map(function (value,index,self) {
  console.log(value + "--" + index + "--" + (arr === self))
});
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true

// 功能2:每次回调函数的返回值被map组成新数组返回
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.map(function(value,index,self){
  return "hi:"+value;
});
console.log(a); // ["hi:Tom", "hi:Jack", "hi:Lucy", "hi:Lily", "hi:May"]
console.log(arr); // ["Tom", "Jack", "Lucy", "Lily", "May"]---原数组未改变

17. filter(callback)

功能:

(1) 同 forEach 功能;

(2) filter 的回调函数需要返回布尔值,遍历所有,最后 filter 将所有回调函数的返回值为 true 的元素组成新数组返回(此功能可理解为“过滤”)。

参数:

  • callback,必须,断言函数。默认有三个参数,分别为 item(遍历到的数组的元素),index(对应的索引),self(数组自身)。
// 功能1:同forEach
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.filter(function (value,index,self) {
  console.log(value + "--" + index + "--" + (arr === self));
});
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true

// 功能2:当回调函数的返回值为true时,本次的数组值返回给filter,被filter组成新数组返回
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.filter(function (value,index,self) {
  return value.length > 3;
});
console.log(a); // ["Jack", "Lucy", "Lily"]
console.log(arr); // ["Tom", "Jack", "Lucy", "Lily", "May"]---原数组未改变

18. every(callback)

功能:判断数组中每一项是否都满足条件,只有所有项都满足条件,才会返回 true,否则返回 false。</p>

参数:

  • callback,必须,断言函数。默认有三个参数,分别为 item(遍历到的数组的元素),index(对应的索引),self(数组自身)。

功能1:当回调函数的返回值为 true 时,类似于 forEach 的功能,遍历所有;如果为 false,那么停止执行,后面的数据不再遍历,停在第一个返回 false 的位置。

// demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function (value,index,self) {
  console.log(value + "--" + index + "--" + (arr == self))
});
// 打印结果为:
// Tom--0--true
//因为回调函数中没有return true,默认返回undefined,等同于返回false

// demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function (value,index,self) {
  console.log(value + "--" + index + "--" + (arr == self))
  return value.length < 4;
});
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
//因为当遍历到Jack时,回调函数到return返回false,此时Jack已经遍历,但是后面数据就不再被遍历了

// demo3:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
  console.log(value + "--" + index + "--" + (arr == self))
  return true;
});
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
// Lucy--3--true
// Lily--4--true
// May--5--true
//因为每个回调函数的返回值都是 true,那么会遍历数组所有数据,等同于 forEach 功能

功能2:使用 every 的返回值。当每个回调函数的返回值都为 true 时,every 的返回值为 true,只要有一个回调函数的返回值为 false,every 的返回值就是 false。

// demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
  var a = arr.every(function(value,index,self){
  return value.length > 3;
});
console.log(a); //false

//demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
  return value.length > 2;
});
console.log(a); //true

19. some(callback)

功能:判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true,否则返回 false。

参数:

  • callback,必须,断言函数。默认有三个参数,分别为 item(遍历到的数组的元素),index(对应的索引),self(数组自身)。

功能1:使用 some 遍历数组元素。因为要判断数组中的每一项,只要有一个回调函数返回 true,some 都会返回 true,所以与 every 正好相反,当遇到一个回调函数的返回值为 true 时,可以确定结果,那么停止执行,后面的数据不再遍历,停在第一个返回 true 的位置;当回调函数的返回值为 false 时,需要继续向后执行,到最后才能确定结果,所以会遍历所有数据,实现类似于 forEach 的功能,遍历所有。

// demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function (value, index, self) {
  console.log(value + "--" + index + "--" + (arr === self))
  return value.length > 3;
});
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true

// demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function (value ,index ,self) {
  console.log(value + "--" + index + "--" + (arr === self))
  return true;
});
// 打印结果为:
// Tom--0--true

// demo3:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function (value, index, self){
console.log(value + "--" + index + "--" + (arr === self))
return false;
});
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
// Lucy--3--true
// Lily--4--true
// May--5--true

功能2:使用 some 的返回值。与 every 相反,只要有一个回调函数的返回值为 true,some 的返回值就为 true,所有回调函数的返回值都为 false,some 的返回值才为 false。

// demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function (value,index,self) {
  return value.length > 3;
});
console.log(a); // true

// demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function (value,index,self) {
  return value.length > 4;
})
console.log(a); // false

20. reduce(callback, initial)

功能:从数组的第1项开始,逐个遍历到最后,迭代数组的所有元素,然后构建一个最终返回的值。

reduce 接收一个或两个参数:第一个是回调函数(callback),表示在数组的每一项上调用的函数;第二个参数(可选的)作为归并的初始值(initial),被回调函数第一次执行时的第一个参数接收。

参数:

callback,必须,默认有四个参数,分别为 pre(上次回调的返回值),item(遍历到的数组的元素),index(对应的索引),self(数组自身)。callback 返回的任何值都会作为下一次执行的 pre。

initial,可选。如果 initial 参数被省略,那么第1次迭代就发生在数组的第2项上,即第1次callback的 pre 参数是数组的第1项,item 参数就是数组的第2项。

// demo1: 不省略 initial 参数,回调函数没有返回值
var arr = [10,20,30,40,50];
arr.reduce(function (pre, item, index, self) {
  console.log(pre + "--" + item + "--" + index + "--" + (arr === self))
}, 2023);
// 打印结果为:
// 2023--10--0--true
// undefined--20--1--true
// undefined--30--2--true
// undefined--40--3--true
// undefined--50--4--true
// 此时回调函数没有 return,所以从第二次开始,pre 拿到的是 undefined

// demo2: 省略 initial 参数,回调函数没有返回值
var arr = [10,20,30,40,50];
arr.reduce(function (pre , item, index, self) {
  console.log(pre + "--" + item + "--" + index + "--" + (arr === self))
});

// 打印结果为:第一次,回调函数的第一个参数是数组的第一项。第二个参数就是数组的第二项
// 10--20--1--true
// undefined--30--2--true
// undefined--40--3--true
// undefined--50--4--true
// 此时回调函数没有return,所以从第二次开始,prev拿到的是undefined

// demo3: 不省略 initial 参数,回调函数有返回值
var arr = [10,20,30,40,50];
  arr.reduce(function(pre, item, index, self) {
  console.log(pre + "--" + item + "--" + index + "--" + (arr == self));
  return "hello";
}, 2023);
// 打印结果为:
// 2023--10--0--true
// hello--20--1--true
// hello--30--2--true
// hello--40--3--true
// hello--50--4--true
// 此时回调函数有return,所以从第二次开始,pre拿到的是回调函数return的值

// demo4: 省略 initial 参数,回调函数有返回值
var arr = [10,20,30,40,50];
  arr.reduce(function (pre, item, index, self) {
  console.log(pre + "--" + item + "--" + index + "--" + (arr == self));
  return "hello";
});
// 打印结果为:第一次,回调函数的第一个参数是数组的第一项。第二个参数就是数组的第二项
// 10--20--1--true
// hello--30--2--true
// hello--40--3--true
// hello--50--4--true
// 此时回调函数有return,所以从第二次开始,prev拿到的是回调函数return的值

// demo5:使用 reduce 计算数组中所有数据的和
var arr = [10,20,30,40,50];
var sum = arr.reduce((pre, item) => pre + item);
console.log(sum); //150
// 回调函数的最后一次return的结果被返回到reduce方法的身上

// demo6:使用 reduce 计算数组中所有数据的和
var arr = [10,20,30,40,50];
var sum = arr.reduce((pre, item) => pre + item, 8);
console.log(sum); //158
// 回调函数的最后一次 return 的结果被返回到 reduce 方法的身上
// 因为reduce有第二个参数initial,在第一次执行时被计算,所以最终结果被加上 8

21. reduceRight(callback, initial)

功能:与 reduce 类似,从数组的最后一项开始,向前逐个遍历到第1项,迭代数组的所有元素,然后构建一个最终返回的值。

参数:同 reduce。

//对象数组obj按照给定key去重(重复元素保留后出现的)
function unique(obj, key) {
  let index = -1;
  let arr = obj.reduceRight((pre, item) => {
    if (pre.map((item) =&gt; item[key]).includes(item[key])) {
      return pre;
    } else {
      return [...pre, item];
    }
  }, []);
  return arr.reverse();
}
const users = [
  { name: "ddd", age: 18 },
  { name: "aaa", age: 12 },
  { name: "bbb", age: 13 },
  { name: "ccc", age: 15 },
  { name: "ddd", age: 14 },
  { name: "ccc", age: 17 },
  { name: "aaa", age: 16 },
];
console.log(unique(users, "name"));

//输出结果:
// [
//   { name: "bbb", age: 13 },
//   { name: "ddd", age: 14 },
//   { name: "ccc", age: 17 },
//   { name: "aaa", age: 16 },
// ]

22. find(callback)

功能:返回满足条件的数组的第一个元素。当数组中的元素在测试函数中返回 true 时,返回符合条件的第一个元素,之后不再调用测试函数判断剩下的元素,如果每个元素都执行了测试函数,没有符合的元素,则返回 undefined。该方法不会改变现有的数组。

参数:

  • callback,必须,断言函数,默认有三个参数,分别为 item(遍历到的数组的元素)、index(对应的索引)和self(数组自身),需要返回一个布尔值。
const arr = [1, 2, 3, 4];
const findItem = arr.find((item) => {
  return item < 2;
});
const findItem1 = arr.find((item) => {
  return item > 5;
});
console.log(findItem); // 1
console.log(findItem1); // undefined

23. findIndex(callback)

功能:返回满足条件的数组的第一个元素的索引值。当数组中的元素在测试函数中返回 true 时,返回符合条件的第一个元素的索引值,之后不再调用测试函数判断剩下的元素,如果每个元素都执行了测试函数,没有符合的元素,则返回 -1 。该方法不会改变现有的数组。

参数:

  • callback,断言函数,默认有三个参数,分别为 item(遍历到的数组的元素)、index(对应的索引)和self(数组自身),需要返回一个布尔值。
const arr = [1, 2, 3, 4];
const findItem = arr.findIndex((item) => {
  return item > 2;
});
const findItem1 = arr.findIndex((item) => {
  return item < 5;
});
console.log(findItem); // 2
console.log(findItem1); // -1

24. includes(item, index)

功能:用来判断一个数组是否包含一个指定的值,如果是则返回 true,否则返回 false。该方法不会改变现有的数组。

参数:

  • item,可选,要查找的元素值。
  • index,可选,开始查找的位置。index如果为负数,表示从最后一位开始算起,如-1表示最后一位。
const arr = ["a","b","c","d"];
const result1 = arr.includes("b");
const result2 = arr.includes("b",2);
const result3 = arr.includes("b",-1);
const result4 = arr.includes("b",-3);

console.log(result1); // true
console.log(result2); // false
console.log(result3); // flase
console.log(result4); // true

25. Array.form(likeObj)

功能:用于将类似数组的对象(即有length属性的对象)和可遍历对象转为真正的数组。该方法不会改变现有的数组。

参数:

  • likeObj,必须,类数组对象。
const json ={
  '0': '喜',
  '1': '欢',
  '2': '你',
  length: 3
};
const arr = Array.from(json);
console.log(arr); // ["喜", "欢", "你"]

26. Array.of(value1, value2, …)

功能:将一组值转变为数组。参数不分类型,只分数量,数量为 0 返回空数组。该方法不会改变现有的数组。

参数:

  • ...value,可选,要转为数组的一组值
let arr1 = Array.of(1,2,3);
let arr2 = Array.of([1,2,3]);
let arr3 = Array.of(undefined);
let arr4 = Array.of();

console.log(arr1); // [1, 2, 3]
console.log(arr2); // [[1, 2, 3]]
console.log(arr3); // [undefined]
console.log(arr4); // []

27. fill(value, start, end)

功能:用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。

参数:

  • value,必需,填充的值。
  • start,可选,开始填充位置,默认为0。如果这个参数是负数,那么它规定的是从数组尾部开始算起。
  • end,可选,停止填充位置,默认为 array.length。如果这个参数是负数,那么它规定的是从数组尾部开始算起。
let arr = [1,2,3,4,5,6];
arr.fill(0); // [0, 0, 0, 0, 0, 0]
arr.fill(0,1); // [1, 0, 0, 0, 0, 0]
arr.fill(0,1,2); // [1, 0, 3, 4, 5, 6]
arr.fill(0,-1); // [1, 2, 3, 4, 5, 0]
arr.fill(0,1,-1); // [1, 0, 0, 0, 0, 6]

28. copyWithin(index, start, end)

功能:用于从数组的指定位置拷贝元素到数组的另一个指定位置中,会覆盖原有成员。该方法不会改变现有的数组。

参数:

  • index,必需,从该位置开始替换数据。
  • start,可选,从该位置开始读取数据,默认为0。如果这个参数是负数,那么它规定的是从数组尾部开始算起。
  • end,可选,到该位置前停止读取数据,默认为 array.length。如果这个参数是负数,那么它规定的是从数组尾部开始算起。
const arr = [1,2,3,4,5,6];
const result1 = [1,2,3,4,5,6].copyWithin(0);
const result2 = [1,2,3,4,5,6].copyWithin(0,1);
const result3 = [1,2,3,4,5,6].copyWithin(1,3,5);
const result4 = [1,2,3,4,5,6].copyWithin(1,2,-1);
const result5 = [1,2,3,4,5,6].copyWithin(1,-4,6);

console.log(result1); // [1, 2, 3, 4, 5, 6]
console.log(result2); // [2, 3, 4, 5, 6, 6]
console.log(result3); // [1, 4, 5, 4, 5, 6]
console.log(result4); // [1, 3, 4, 5, 5, 6]
console.log(result5); // [1, 3, 4, 5, 6, 6]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴雪月乔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值