(二)JavaScript常用数组操作方法,包含ES6方法

本文深入解析JavaScript中的数组方法,包括concat(), join(), push(), pop(), unshift(), shift(), slice(), splice(), sort(), reverse(), indexOf(), lastIndexOf(), every(), some(), filter(), map(), forEach(), find(), findIndex(), fill(), copyWithin(), from(), of(), for...of循环, entries(), values(), keys(), includes()等。详细介绍了这些方法的功能、参数及使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 concat()
concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,仅会返回被连接数组的一个副本。
var arr1 = [1, 2, 3]
var arr2 = [4, 5]
var arr3 = arr1.concat(arr2)
console.log(arr1) //[ 1, 2, 3 ]
console.log(arr2) //[4,5]
console.log(arr3) //[1,2,3,4,5]
二 join()
join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的,默认使用’,'号分割,不改变原数组。
var arr = [2, 3, 4]
var s = arr.join("|")
var s1 = arr.join()
console.log(s) //2|3|4
console.log(s1) //2,3,4
console.log(arr) //[ 2, 3, 4 ]
三 push()
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。末尾添加,返回的是长度,会改变原数组。

var a = [1, 2, 3, 4]
var b = a.push(6)
console.log(a) //[ 1, 2, 3, 4, 6 ]
console.log(b) //5
    //push可以一次添加多个元素
var a1 = [1]
a1.push(2, 3, 4, 5, 6)
console.log(a1) //[ 1, 2, 3, 4, 5, 6 ]
四 pop()
pop() 方法用于删除并返回数组的最后一个元素。返回最后一个元素,会改变原数组。
var arr = [1, 2, 3]
console.log(arr.pop())//3
console.log(arr)//[1,2]
五 unshift()
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。返回新长度,改变原数组。
var arr = [1, 2, 3]
console.log(arr.unshift(8, 8, 8)) //6
console.log(arr) //[ 8, 8, 8, 1, 2,
六 shift()
shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。返回第一个元素,改变原数组。
var arr = [1, 2, 3]
console.log(arr.shift()) //1
console.log(arr) //[2,3]
七 slice()
返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。返回选定的元素,该方法不会修改原数组
var arr = [1, 2, 3, 4, 5]
console.log(arr.slice(1, 3)) //[2,3]
console.log(arr.slice(1)) //[ 2, 3, 4, 5 ]
console.log(arr) //[1,2,3,4,5]
八 splice()
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。splice() 方法会直接对数组进行修改。
var a = [2, 3, 4, 5]
//1 是删除的起始位置 2是删除的长度,9就添加的元素
console.log(a.splice(1, 2, 9)) //[ 3, 4 ]
console.log(a) //[ 2, 9, 5 ]

var b = [1, 2, 3, 4, 5]
console.log(b.splice(1, 3)) //[ 2, 3, 4 ]
console.log(b) //[1,5]
九 sort 排序
按照 Unicode code 位置排序,默认升序
var arr = ["chec", "apple", "banner"]
console.log(arr.sort()) //[ 'apple', 'banner', 'chec' ]
console.log(arr) //[ 'apple', 'banner', 'chec' ]

var arr1 = [1, 2, 10, 99, 31]
console.log(arr1.sort()) //[ 1, 10, 2, 31, 99 ]
console.log(arr1) //[ 1, 10, 2, 31, 99 ]
sort对数字进行排序的时候,需要自己写函数当做参数传递到sort里面,因为当数字是多位的时候,它默认是按照第一位进行排序的,也就是1>33的
var arr = [1, 55, 44, 2, 8, 7, 56]
arr.sort((x, y) => x - y)
console.log(arr) //[ 1, 2, 7, 8, 44, 55, 56 ]
十 reverse()
reverse() 方法用于颠倒数组中元素的顺序。返回的是颠倒后的数组,会改变原数组
var arr = [2, 3, 4, 5]
console.log(arr.reverse()) //[ 5, 4, 3, 2 ]
console.log(arr) //[ 5, 4, 3, 2 ]
十一 indexOf 和 lastIndexOf
都接受两个参数:查找的值、查找起始位置
不存在,返回 -1 ;存在,返回位置。indexOf 是从前往后查找, lastIndexOf 是从后往前查找。
indexOf
var a = [1, 5, 4, 7, 4, 8, 9]
console.log(4) //2
console.log(a.indexOf(4, 3)) //4
console.log(a.indexOf(10)) //-1
lastIndexOf

返回的索引值都是数组的索引,并不因为从后或者从前搜索而改变索引值。
lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。

var a = [1, 5, 4, 7, 4, 8, 9]
console.log(a.lastIndexOf(4)) //4
console.log(a.lastIndexOf(4, 3)) //2
十二 every()
对数组的每一项都运行给定的函数,每一项都返回 ture,则返回 true
//element数组中的每个元素 index索引 array数组对象
function isBig(element, index, array) {
    return element < 11;
}
var a = [2, 3, 4, 7, 9]
var b = [19, 2, 4, 5, 6]
console.log(a.every(isBig)) //true
console.log(b.every(isBig)) //false
十三 some()
对数组的每一项都运行给定的函数,任意一项都返回 ture,则返回 true
//element数组中的每个元素 index索引 array数组对象
function isBig(element, index, array) {
    return element < 11;
}
var a = [2, 3, 4, 7, 9]
var b = [19, 2, 4, 5, 6]
var c = [11, 23, 44, 55, 66]
console.log(a.some(isBig)) //true
console.log(b.some(isBig)) //true
console.log(c.some(isBig)) //false
十四 filter()
对数组的每一项都运行给定的函数,返回 结果为 ture 的项组成的数组

//element数组中的每个元素 index索引 array数组对象
function isBig(element, index, array) {
    return element < 11;
}
var b = [19, 2, 4, 5, 6]
console.log(b.filter(isBig)) //[ 2, 4, 5, 6 ]
十六、map()
对数组的每一项都运行给定的函数,返回每次函数调用的结果组成一个新数组
//element数组中的每个元素 
function isBig(element) {
    return element * 2;
}
var a = [2, 3, 4, 7, 9]

console.log(a.map(isBig)) //[ 4, 6, 8, 14, 18 ]
十七、forEach 数组遍历

var a = [1, 2, 3, 4]
a.forEach(item => {
    console.log(item)
})
//1
2
3
4

下面的都是ES6新增的方法

1、find():
find方法是从数组中查找。在find方法中我们需要传入一个匿名函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索,函数需要传入三个参数:
  • value :表示当前查找的值
  • index : 表示当前查找的数组索引
  • arr : 表示当前数组

let arr = [1, 2, 3, 4]
console.log(arr.find((value, index, arr) => value > 2)) //3
2、findIndex()
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。
let arr = [1, 2, 3, 4]
console.log(arr.findIndex((value, index, arr) => value > 2)) //2
3、fill()
用新元素替换掉数组内的元素,可以指定替换下标范围,它接收三个参数,第一个参数是填充的变量,第二个是开始填充的位置,第三个是填充到的位置。
let arr=[0,1,2,3,4,5,6,7,8,9];
arr.fill('javascript',2,4);
console.log(arr);//[0, 1, "javascript", "javascript", 4, 5, 6, 7, 8, 9]
4、copyWithin()
选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也可以指定要复制的元素范围。(在当前数组内部,将指定位置的成员复制到其他位置,返回当前数组。)

参数:

  • 第一个参数(从该位置开始替换数据)
  • 第二个参数(可选 从该位置开始读取数据,默认为0,负值表示倒数);
  • 第三个参数(可选 到该位置前停止读取,默认为数组长度)
//  将 3 号位复制到 0 号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// -2 相当于 3 号位, -1 相当于 4 号位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
//  将 3 号位复制到 0 号位
[].copyWithin.call({length: 5, 3: 1}, 0, 3)
// {0: 1, 3: 1, length: 5}
//  将 2 号位到数组结束,复制到 0 号位
var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]
//  对于没有部署 TypedArray 的 copyWithin 方法的平台
//  需要采用下面的写法
[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
// Int32Array [4, 2, 3, 4, 5]

5、from
Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。
那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象。
let json = {
    '0': 'JSfe',
    '1': '温情也',
    '2': '大大',
    length: 3
}

这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要是这种特殊的json格式都可以轻松使用ES6的语法转变成数组。在ES6中绝大部分的Array操作都存在于Array对象里。我们就用Array.from(xxx)来进行转换。我们把上边的JSON代码转换成数组,并打印在控制台。

let json = {
    '0': 'JSfe',
    '1': '温情也',
    '2': '大大',
    length: 3
}
let arr = Array.from(json);
console.log(arr) //[ 'JSfe', '温情也', '大大' ]
6、of
它负责把一堆文本或者变量转换成数组。在开发中我们经常拿到了一个类似数组的字符串,需要使用eval来进行转换,如果你一个老手程序员都知道eval的效率是很低的,它会拖慢我们的程序。这时候我们就可以使用Array.of方法。我们看下边的代码把一堆数字转换成数组并打印在控制台上:
let arr = Array.of(3, 4, 5, 6);
console.log(arr); //[ 3, 4, 5, 6 ]

用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数个数的不同,会导致 Array() 的行为有差异。

console.log(Array()) //[]
console.log(Array(3)) //[,,,][ <3 empty items> ]
console.log(Array(1, 2, 3)) //[ 1, 2, 3 ]
console.log(Array.of(2)) //[ 2 ]
7、for of循环
let arr = [1, 2, 3, 4]
for (let item of arr) {
    console.log(item)
}//1 2 3 4 
8、entries() 返回迭代器:返回键值对

一个新的 Array 迭代器对象。Array Iterator是对象,它的原型(proto:Array Iterator)上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]。

let arr = ["a", "b", "c"]
for (let e of arr.entries()) {
    console.log(e)
}
/** 
 *
 [0, 'a']
 [1, 'b']
 [2, 'c'] 
 **/
9、values() 返回迭代器:返回键值对的value

let arr = ["a", "b", "c"]
for (let e of arr.values()) {
    console.log(e)
} //a b c
10、keys() 返回迭代器:返回键值对的key
let arr = ["a", "b", "c"]
for (let e of arr.keys()) {
    console.log(e)
} //1 2 3
11、includes()
判断数组中是否存在该元素,参数:查找的值、起始位置,可以替换 ES5 时代的 indexOf 判断方式。indexOf 判断元素是否为 NaN,会判断错误

var a = [1, 2, 3]
console.log(a.includes(1))//true
console.log(a.includes(5))//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值