资讯专栏INFORMATION COLUMN

JS数组方法汇总

SexySix / 2196人阅读

摘要:用于找出第一个满足提供的回调函数的数组成员。由被删除的数组元素组成的一个数组。返回一个字符串,表示指定的数组及其元素

工具类方法

Array.from() :从一个类似数组或者可迭代对象中创建一个新的数组实例。
用一种更通俗易懂的方式来说,就是Array.from方法用于将两类对象转为真正数组:类数组对象(array-like object)和可遍历(iterable)的对象。
实际应用中,常见的类数组对象是 DOM 操作返回的 NodeList 集合,以及函数内部的arguments对象。Array.from都可以将它们转为真正的数组。
语法:Array.from(arrayLike[, mapFn[, thisArg]])
参数:
arrayLike 想要转换成数组的伪数组对象或可迭代对象。
mapFn (可选参数) 如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg (可选参数) 可选参数,执行回调函数 mapFn 时 this 对象。
返回值: 一个新的数组实例

// arguments对象
function foo() {
  var args = Array.from(arguments);
  // ...
}
Array.from("hello")
// ["h", "e", "l", "l", "o"]

// Using an arrow function as the map function to
// manipulate the elements
Array.from([1, 2, 3], x => x + x);      
// [2, 4, 6]

Array.isArray() 用于确定传递的值是否是一个 Array
语法:Array.isArray(obj)
参数:obj 需要检测的值;
返回值:如果对象是 Array,则为true; 否则为false

Array.isArray([1, 2, 3]);  
// true
Array.isArray({foo: 123}); 
// false
Array.isArray("foobar");   
// false
Array.isArray(undefined);  
// false

Array.of方法用于将一组值,转换为数组
语法:Array.of(element0[, element1[, ...[, elementN]]])
参数:
elementN
任意个参数,将按顺序成为返回数组中的元素。
返回值:新的 Array 实例。
Array.of 和构造函数Array的区别

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。
Array.of基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

遍历方法

Array.prototype.forEach:对数组的每个元素执行一次提供的函数
语法:

array.forEach(callback(currentValue, index, array){
    //do something
}, this)

参数:
callback: 为数组中每个元素执行的函数,该函数接收下面3个参数;
currentValue: 当前数组元素;
index(可选): 当前数组索引;
array(可选): 被遍历的数组本身;
this(可选): 当执行callback回调函数时用作this的值(参考对象)
返回值:undefined
示例:

// 打印每个数组元素
function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}

Array.prototype.map(): 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
语法:

var new_array = arr.map(function callback(currentValue[, index[, array]]) {
 // Return element for new_array }[, 
thisArg])

参数:
callback:生成新数组元素的函数,有下面3个参数:
currentValue: 当前数组元素;
index(可选): 当前数组索引;
array(可选): 被遍历的数组本身;
thisArg(可选): 当执行callback回调函数时用作this的值(参考对象)
返回值:一个新数组,每个元素都是回调函数的结果。
示例:

// 求数组中每个元素的平方根
let arr = [1, 4, 9];
let new_arr = arr.map(currentValue => {
  return Math.sqrt(currentValue)
})
console.log(new_arr)

Array.prototype.reduce():reduce方法把一个函数作用在数组的所有元素。这个函数必须接收至少两个参数,reduce()把函数的返回结果继续和数组的下一个元素做累积计算
语法:

arr.reduce(function callback(accumulator, currentValue[, currentIndex, array]) {
  // coding...
}[, initialValue)

参数:
callback: 执行数组中每个值的函数,包含四个参数:
accumulator: 函数回调的返回值;它是上一次调用回调时返回的累积值,或initialValue(见于下方)。
currentValue: 数组正在处理的元素。
currentIndex: 数组中正在处理的当前元素的索引。如果提供了initialValue,则索引号未0,否则索引为1。
array: 调用reduce()的数组。
initialValue: 作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
返回值:函数累计处理的结果。
示例:

// 求数组中每个元素的和
var arr = [1, 2, 3, 4];
var sum = arr.reduce(function (x, y) {
  return x + y;
}
// 10

Array.prototype.reduceRight():reduceRight方法把一个函数作用在数组的所有元素。这个函数必须接收至少两个参数,reduceRight()把函数的返回结果继续和数组的下一个元素做累积计算。和reduce不同的是,reduceRight的遍历顺序是从右到左。

Array.prototype.every(): every方法测试数组的所有元素是否都通过了指定元素的测试。
语法:

arr.erery(callback[, thisArg])

参数:
callback:用来测试每个元素的函数。
thisArg:执行callback时内部指定的this值。
示例:

var arr = [1, 2, 3, 4, 11];
var passed = arr.every(function (x) {
  return x < 10;
}
// passed is false

Array.prototype.some():some方法测试数组的所有元素中是否有通过测试的。
语法:

arr.some(callback[, thisArg])

参数:
callback:用来测试每个元素的函数。
thisArg:执行callback时内部指定的this值。
示例:

var arr = [1, 2, 3, 4, 10];
var passed = arr.some(function (x) {
  return x < 10;
}
// passed is true

Array.prototype.filter(): filter()方法创建一个数组,其包含通过所提供函数实现的测试的所有元素。
语法:

var new_array = arr.filter(callback(element[, index[, array]])[, thisArg])

参数:
callback
用来测试数组的每个元素的函数。调用时使用参数(element, index, array)。
返回true表示保留该元素(通过测试),false则不保留,它接受三个参数:
element 当前在数组中处理的元素
index(可选) 正在处理元素在数组中的索引
array(可选) 调用了filter的数组
thisArg(可选) 执行callback时的用于 this 的值

示例:

var filtered = [12, 5, 8, 130, 44].filter(currentValue => {
  return currentValue > 10;
});
// filtered is [12, 130, 44]

Array.prototype.keys(): 对数组键名(也就是索引值)的遍历,返回一个遍历器对象。
Array.prototype.value(): 对数组键值(也就是数组元素)的遍历,返回一个遍历器对象。
Array.prototype.entries: 对数组键值对(索引值,对应数组元素)的遍历,返回一个遍历器对象。

直接上示例代码:

for (let index of ["a", "b"].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ["a", "b"].values()) {
  console.log(elem);
}
// "a"
// "b"

for (let [index, elem] of ["a", "b"].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"
查找方法

Array.prototype.find(): 用于找出第一个满足提供的回调函数的数组成员。所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。否则返回undefined。
Array.prototype.findIndex():用于找出第一个满足提供的回调函数的数组成员。所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员的位置(也就是索引)。否则返回-1。
语法:

arr.find(callback[, thisArg]);
arr.findIndex(callback[, thisArg]);

参数:
callback
针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
element 当前元素。
index 当前元素的索引。
array 调用findIndex的数组。
thisArg 可选。执行callback时作为this对象的值.

示例:

[1, 5, 10, 15].find(function(value, index, arr) {
  return value % 2 == 0;
}) // 10
[1, 5, 10, 15].find(function(value, index, arr) {
  return value % 2 == 0;
}) // 2

Array.prototype.indexOf:indexOf方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
Array.prototype.lastIndexOf:lastIndexOf方法返回在数组中可以找到一个给定元素的最后一个索引(从数组的后面向前查找),如果不存在,则返回-1。
语法:

arr.indexOf(searchElement[, fromIndex = 0])
arr.lastIndexOf(searchElement[, fromIndex = 0])

参数:
searchElement 要查找的元素
fromIndex 开始查找的位置(对indexOf而言)或者开始逆向查找的位置(对lastIndexOf而言)
示例:

var indexof = [1, 5, 10, 5].indexOf(5) // 1
var lastindexof = [1, 5, 10, 5].indexOf(5) // 3

Array.prototype.includes(): includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
语法:

arr.includes(searchElement, fromIndex)

参数:
searchElement 需要查找的元素值。
fromIndex 可选 从该索引处开始查找 searchElement。如果为负值,则按升序从 array.length - fromIndex 的索引开始搜索。默认为 0。

增删元素方法

Array.prototype.pop: 从数组中删除最后一个元素,并返回该元素的值。此方法改变数组的长度。
Array.prototype.push: 将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
示例:

// pop
let myFish = ["angel", "clown", "mandarin", "surgeon"];

let popped = myFish.pop();

console.log(myFish); 
// ["angel", "clown", "mandarin"]

console.log(popped); 
// surgeon

// push
var sports = ["soccer", "baseball"];
var total = sports.push("football", "swimming");

console.log(sports); 
// ["soccer", "baseball", "football", "swimming"]

console.log(total);  
// 4

Array.prototype.shift(): 从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
Array.prototype.unshift(): 将一个或多个元素添加到数组的开头,并返回该数组的新长度。
示例:

// shift
let myFish = ["angel", "clown", "mandarin", "surgeon"];

let shift_length = myFish.shift();

console.log(myFish); 
// ["clown", "mandarin", "surgeon"]

console.log(shift_length); 
// angel

// unshift
let sports = ["soccer", "baseball"];
let unshift_length = sports.unshift("football", "swimming");

console.log(sports); 
// ["football", "swimming", "soccer", "baseball"]

Array.prototype.splice: 通过删除现有元素和/或添加新元素来更改一个数组的内容
语法:array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

参数:
start​:指定修改的开始位置(从0开始计数)
deleteCount:可选 指定要删除的数组元素的个数,如果省略该参数,则从start开始的所有数组元素都被删除(包括第start位)
item1, item2, ... : 可选,要添加进数组的元素,如果省略该参数,则只删除数组元素
返回值:
如果没有删除元素,则返回空数组。由被删除的数组元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。
示例:

var myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"];
var removed = myFish.splice(3, 1, "big", "small");
console.log(myFish);
console.log(removed)
// > Array ["angel", "clown", "drum", "big", "small", "sturgeon"]
// > Array ["mandarin"]
拼接/截取方法

Array.prototype.concat(): 拼接两个或者多个数组,此方法不会修改原数组,而是返回一个新的数组。
示例:

var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var new_arr = arr1.concat(arr2);
// new_arr [1, 2, 3, 4, 5, 6]

Array.prototype.slice(): 返回一个新的数组对象,这一对象是一个由 begin和end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。
语法:arr.slice(begin, end);
参数:
begin: 可选 从该索引处开始提取原数组中的元素,如果省略该参数,则从0开始。
end: 可选 从该索引处结束提取原数组中的元素,如果省略该参数,则会一直提取到原数组末尾。
示例:

var arr = [1, 2, 3, 4, 5, 6];
var sub_arr = arr.splice(1, 4);
// sub_arr [2, 3, 4]
排序方法

Array.prototype.reverse(): 将数组中元素的位置颠倒,第一个数组元素成为最后一个数组元素,最后一个数组元素成为第一个。
示例:

var arr = [1, 2, 3, 4, 5, 6];
arr.reverse();
// arr -> [6, 5, 4, 3, 2, 1]

Array.prototype.sort():MDN给出的定义是用原地算法对数组的元素进行排序,并返回数组。排序不一定是稳定的。默认排序顺序是根据字符串Unicode码点。具体是咋排的我也不知道,我的理解就是按照字符串的Unicode码点进行排序的。
语法:arr.sort([compareFunction])
参数:
compareFunction: 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序;如果不省略 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript
标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);

如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

示例:

//升序
function sort_increase(a, b) {
 return a - b
}
// 降序
function sort_decrease(a, b) {
 return b - a
}
var arr = [3, 0 ,6 ,2 ,4 ,7]
arr.sort(sort_increase)
console.log(arr)

arr.sort(sort_decrease)
console.log(arr)

// > Array [7, 6, 4, 3, 2, 0]
// > Array [0, 2, 3, 4, 6, 7]
其他

Array.prototype.copyWith():在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,这个方法会修改原有数组。
语法:arr.prototype.copyWith(target, start = 0, end = this.length)
参数:
target(必需):从该位置开始替换数据。如果为负值,表示倒数。
start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
示例:

[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]

Array.prototype.fill(): 使用给定值,填充一个数组。这个方法会修改原有数组。

语法:arr.fill(value[, start[, end]])
参数:
value 用来填充数组元素的值。
start 可选 起始索引,默认值为0。
end 可选 终止索引(不包括该位置),默认值为 this.length。
示例:

[1, 2, 3].fill(4);               // [4, 4, 4]
[1, 2, 3].fill(4, 1);            // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1);         // [1, 2, 3]
[1, 2, 3].fill(4, 3, 3);         // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]

Array.protytye.join(): 一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
语法:arr.join(separator)
参数:
separator 指定一个字符串来分隔数组的每个元素,如果省略(),数组元素用逗号分隔。默认为 ","。

Array.prototype.toLocalString(): 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 ",")隔开。
Array.prototype.toString(): 返回一个字符串,表示指定的数组及其元素.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98483.html

相关文章

  • JS中求数组最大(最小)值汇总(持续更新)

    摘要:如何使用,在一个类型的数组里,查找最大或最小数呢以下介绍五个方法。利用代码如下解释方法就是通过一个函数,针对一个累加器和数组中的每一个元素,将一个数组最终减少到一个值。如果求最小值,将改成。 如何使用JS,在一个Number类型的数组里,查找最大(或最小)数呢? 以下介绍五个方法。(如果有新方法,后续会更新,也欢迎各位留言提供新方法) 1. 不使用任何库函数 代码如下: functio...

    church 评论0 收藏0
  • JS基础篇--JS数组常用方法汇总

    摘要:在,下,数据有添加成功,但返回值却是转换方法方法方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。而调用数组的方法后,其值的顺序变成了。返回值如果从中删除了元素,则返回的是含有被删除的元素的数组。 转换方法 所有对象都具有toLocaleString()、toString()、valueOf()方法。其中调用数组的toString方法会返回以数组中的每个值的字...

    techstay 评论0 收藏0
  • JS 数组方法学习汇总

    摘要:整个数组的大操作转换拼接排序倒置这个方法是将数组转换为字符串,数组元素间用传进去的参数没有参数就用分隔这个方法用于拼接两个数组并返回一个新的数组。看代码吧打印整个数组这个方法是对数组的每一项运行给定函数,返回每一项返回结果组成的数组。 前言 在 JS 中我们数组用的是比较多的了,它自带了很多方法可以用,省去了我们时间,特别是 ES6 当中对数组的扩展让数组具有了更强大的功能,为了以后使...

    PAMPANG 评论0 收藏0
  • JS对象 - Array属性方法汇总

    摘要:属性名描述为对象添加属性方法返回数组对象引用返回数组元素数目方法名描述返回更改原数组连接多个数组连接后新数组将数组中所有元素合为一个字符串。 属性名 描述 prototype 为对象添加属性、方法 constructor 返回数组对象引用 length 返回数组元素数目 方法名 描述 返回 更改原数组 concat() 连接多个数组 连接后新数组 N ...

    RancherLabs 评论0 收藏0
  • JS数组方法汇总

    Javascript原生方法 注意:js数组每一项可以保存任何类型的数据,比如第一个元素是字符串,第二个元素是数字,第三个元素是对象 创建数组 tips: 建议使用数组字面量方式【简单】 var colors = new Array() var colors = new Array(red,blue) var colors = []; var colors = [red,blue]; 检测数组 ...

    wean 评论0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月汇总(100 题攻略)

    摘要:月下半旬攻略道题,目前已攻略题。目前简单难度攻略已经到题,所以后面会调整自己,在刷算法与数据结构的同时,攻略中等难度的题目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道题,目前已攻略 100 题。 一 目录 不折腾的前端,和咸鱼有什么区别...

    tain335 评论0 收藏0

发表评论

0条评论

SexySix

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<