ES6发布于2015年,增加了重要的新特性(包括类和模块语法)。这些新特性把javaScript从一门脚本语言转变成一门适合大规模软件工程的严肃、通用的语言。本文主要介绍一些es6新增的数组方法。
使用该方法能遍历数组的每一个元素,并且能对数组元素做处理并返回一个新数组。
例子:给一个数字数组的每一项添加价格单位。
let array = [1, 2, 3]
//1.map方法能对数组元素做处理并返回一个新数组
//item-->元素,index-->索引
let newArray = array.map((item,index) => item + "元")
// ['1元', '2元','3元']
console.log(newArray);
filter()方法能根据表达式是true还是false过滤掉一些元素并返回一个新数组。
例子:把数字小于2的数字过滤掉。
let array = [1, 2, 3]
let filterArray = array.filter((item) => item >= 2)
// [ 2, 3 ]
console.log(filterArray);
在数组的判断过程中,判断整体的每一个元素是否全部都符合一项基本要求。
some方法: 一真及真, 只要有一个符合就返回,true。
every方法: 一假即假, 只要其中有一个不符合要求就返回,false
例子1:判断一个班的所有学生的成绩,看看是否有人不及格。
let scores = [80, 49, 12, 50, 69]
let result = scores.some(item => item < 60)
//返回true,有人不及格
console.log(result)
例子2:判断一个班的所有学生的成绩看看是否所有人都及格了。
let scores = [80, 49, 12, 50, 69]
let result = scores.every(item => item >= 60)
//返回false 所有并不是都及格了
console.log(result)
归并方法
reduce和reduceRight方法会迭代数组的所有项,并在此基础上构建一个最终返回值。
reduce()方法从数组第一项开始遍历到最后一项。reduceRight()方法从最后一项开始遍历至第一项。
参数:
参数 | 说明 |
---|---|
prev | 上一次操作返回的结果。如果不给prev设置默认值,那么第一个元素就作为第一个prev |
item | 本次操作的元素 |
index | 本次操作元素的索引值 |
array | 当前操作的数组 |
例子1:数组求和
let arr = [20, 40, 50, 21]
let values = arr.reduce((prev, item, index, array) => {
//给个return 循环四次 第一次输出prev是20,
//第二次40+20是60,第三次是110 最后一次输出131
console.log("prev" + prev)
return prev + item
})
//131
console.log(values)
例子2:数组去重
let arr1 = ["a", "b", "c", "a", "b", "b"]
let result1 = arr1.reduce((prev, item) => {
//includes判断是有具有指定元素 有返回true 没有返回false
if (!prev.includes(item)) {
//向数组添加一个新元素
prev.push(item)
}
return prev
}, []) //给prev设置默认值,设置一个默认空数组
//["a","b","c"]
console.log(result1)
例子3:统计字符的出现次数
let arr2 = ["a", "b", "a", "c", "b", "a", "c"]
//返回一个对象 统计每一个字符的出现次数
let result2 = arr2.reduce((prev, item) => {
//判断字符是否出现过
if (item in prev) {
//已经出现过,次数+1
prev[item]++
} else {
//第一次出现,赋初值为1
prev[item] = 1
}
return prev
}, {})
//{a: 3, b: 2, c: 2}
console.log(result2)
此方法是用来代替 for 循环遍历数组的。
参数 | 说明 |
---|---|
value | 数组的元素 |
index | 数组的索引 |
arr | 当前操作的数组 |
例子:遍历输出数组的每一项
let arr3 = [1, 2, 3, 4];
arr3.forEach(function (value, index, arr) {
//0:1 1:2 2:3 3:4
console.log(index + ":" + value);
})
返回值为符合条件的对应的那个值,后者从后往前遍历。
例子:从数组中获取一个大于等于2的数。
let arr6 = [1, 2, 3];
// 得到第一个符合条件的数据,返回给变量
let bigNum = arr6.find(num => num >= 2)
//2
console.log(bigNum);
返回值为符合条件的对应的那个值的下标
后者从后往前遍历
例子:从数组中获取一个大于等于2的数的下标。
let arr7 = [1, 2, 3];
let num7 = arr7.findIndex(num => num >= 2)
//1
console.log(num7);
方法返回一个布尔值,表示某个数组是否包含给定的值。
例子:判断数组是否包含数字3。
let arr8 = [1, 2, 3]
let isIncluds = arr8.includes(3)
//true
console.log(isIncluds);
用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
let arr9 = [1, [2, 3]]
let result9 = arr9.flat()
// [ 1, 2, 3 ]
console.log(result9);
flatMap()方法对原数组的每个成员执行一个函数,然后对返回值组成的数组执行flat()方法。
该方法返回一个新数组,不改变原数组。
let result9_1 = [2, 3, 4].flatMap((x) => [x, x * 2])
//[ 2, 4, 3, 6, 4, 8 ]
console.log(result9_1);
接受一个整数作为参数,返回对应位置的成员,并支持负索引。
const arr10 = [5, 12, 8, 130, 44];
arr10.at(2) // 8
arr10.at(-2) // 130
方法 | 说明 |
---|---|
toReversed() | 对应reverse(),用来颠倒数组成员的位置。 |
toSorted() | 对应sort(),用来对数组成员排序。 |
toSpliced() | 对应splice(),用来在指定位置,删除指定数量的成员,并插入新成员。 |
with(index, value) | 对应splice(index, 1, value),用来将指定位置的成员替换为新的值。 |
const sequence = [1, 2, 3];
sequence.toReversed() // [3, 2, 1]
sequence // [1, 2, 3]
const outOfOrder = [3, 1, 2];
outOfOrder.toSorted() // [1, 2, 3]
outOfOrder // [3, 1, 2]
const array11 = [1, 2, 3, 4];
array11.toSpliced(1, 2, 5, 6, 7) // [1, 5, 6, 7, 4]
array11 // [1, 2, 3, 4]
const correctionNeeded = [1, 1, 3];
correctionNeeded.with(1, 2) // [1, 2, 3]
correctionNeeded // [1, 1, 3]
of()方法用于将一组值,转换为数组。
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1