ES6数组新方法[通俗易懂]

ES6数组新方法[通俗易懂]ES6数组新方法目录ES6数组新方法1.`forEach()`和`map()`2.`filter()`3.`reduce()`4.`some()`5.`every()`6.`Array.from()`7.`Array.of()`8.`copyWithin()`9.`find()`和`findIndex()`10.`fill()`11.`entries()`,`keys()`和`values()`12.`includes()`13.`flat()`,`flatMap()`

大家好,又见面了,我是你们的朋友全栈君。

ES6数组新方法

1. forEach()map()

forEach()会修改原来的数组,不会返回执行结果。map()方法会得到一个新的数组并返回。
map的执行速度会更快。

let arr = [1, 2, 3, 4, 5];
arr.forEach((num, index) => { 
   
    return (arr[index] = num * 2);
});
let doubled = arr.map(num => { 
   
    return num * 2;
});
// [2, 4, 6, 8, 10]

2. filter()

创建一个新数组, 返回符合条件的元素。

var arr = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const newArr = arr.filter((arrItem,index,arr) => { 
   
	console.log(arrItem,index,arr)
	return arrItem.length > 6
});
console.log(newArr);

在这里插入图片描述

3. reduce()

官方:对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
简单来讲,他的主要作用,就是可以取到上次遍历的返回值。进而做累加等操作

var people = [
  { 
    name: 'Alice', age: 21 },
  { 
    name: 'Max', age: 20 },
  { 
    name: 'Jane', age: 20 }
]

people.reduce( 
    (acc, obj, index, array )=>{ 
   
        console.log(acc, obj)
        return '第一参数为上一次遍历的返回值:' + index
     }, 
    { 
   name: 'tom', age: 0}
)

在这里插入图片描述

4. some()

判断数组中是不是,至少有1个元素,通过了被提供的函数。

var fruits = ['apple', 'banana', 'mango', 'guava'];

function checkAvailability(arr, val) { 
   
  return arr.some( 
	(arrVal) => { 
   
	   return val === arrVal
	}
  );
}
checkAvailability(fruits, 'kela');   // false
checkAvailability(fruits, 'banana');  // true

5. every()

指数组内的所有元素是否都能通过某个指定函数

[12, 5, 8, 130, 44].every(x => x >= 10); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true

6. Array.from()

用于将类似数组的对象和可遍历对象转为真正的数组

//还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组
Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]
// 如果map函数里面用到了this关键字,还可以传入Array.from的第三个参数,用来绑定this

7. Array.of()

用于将一组值,转换为数组。
用来弥补数组构造函数Array()的不足,基本上可以用来替代Array()new 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]

8. copyWithin()

将指定位置的成员复制到其他位置,然后返回当前数组,会修改当前数组。
在这里插入图片描述

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

9. find()findIndex()

// find:找出第一个符合条件的数组成员
// 回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组
[1, 5, 10, 15].find(function(value, index, arr) { 
   
  return value > 9;
}) // 10
// findIndex:返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
[1, 5, 10, 15].findIndex(function(value, index, arr) { 
   
  return value > 9;
}) // 2

这两个方法都可以接受第二个参数,用来绑定回调函数的this对象。

function f(v){ 
   
  return v > this.age;
}
let person = { 
   name: 'John', age: 20};
[10, 12, 26, 15].find(f, person);    // 26

10. fill()

使用给定值,填充一个数组。用于空数组的初始化非常方便。

['a', 'b', 'c'].fill(7)
new Array(3).fill(7)
// [7, 7, 7]
// fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']
// 如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象

11. entries()keys()values()

用于遍历数组。它们都返回一个遍历器对象。
keys()是对键名的遍历、values()是对键值的遍历,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"

12. includes()

表示某个数组是否包含给定的值,方法返回一个布尔值。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

// 第二个参数表示搜索的起始位置,默认为0, 支持负数
[1, 2, 3].includes(3, 3);  // false

13. flat()flatMap()

flat:用于将嵌套的数组“拉平”,变成一维的数组。返回一个新数组
flatMap:对原数组的每个成员执行一个函数,然后对返回值组成的数组执行flat()方法,返回一个新数组。

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

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

[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
// 会跳过空位
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

// flatMap()只能展开一层数组
[2, 3, 4].flatMap((x) => [x * 1, x * 2])
// [2, 4, 3, 6, 4, 8]
// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
// flatMap()方法的参数是一个遍历函数,该函数可以接受三个参数,分别是当前数组成员、当前数组成员的位置(从零开始)、原数组。
// flatMap()方法还可以有第二个参数,用来绑定遍历函数里面的this。
arr.flatMap(function callback(currentValue[, index[, array]]) { 
   
  // ...
}[, thisArg])

14. at()

接受一个整数作为参数,返回对应位置的成员,主要是为了解决运算符[]不支持负索引。

const arr = [5, 12, 8, 130, 44];
arr.at(2) // 8
arr.at(-2) // 130

接着看es5的数组方法:
点这里:js数组方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137497.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Angular面试题_angular面试

    Angular面试题_angular面试一、ng-show/ng-hide与ng-if的区别?第一点区别是,ng-if在后面表达式为true的时候才创建这个dom节点,ng-show是初始时就创建了,用display:block和display:none来控制显示和不显示。第二点区别是,ng-if会(隐式地)产生新作用域,ng-switch、ng-include等会…

    2022年8月31日
    5
  • 观察者模式写的Log打印

    观察者模式写的Log打印

    2021年7月3日
    100
  • @NotNull的依赖

    @NotNull的依赖importorg.jetbrains.annotations.NotNull;Maven依赖<dependency><groupId>org.jetbrains</groupId><artifactId>annotations</artifactId><version>20.1.0</version></dependency>待续………

    2022年6月12日
    58
  • acwing-1169. 糖果(差分约束)「建议收藏」

    acwing-1169. 糖果(差分约束)「建议收藏」幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, 老师需要满足小朋友们的 K 个要求。幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。输入格式输入的第一行是两个整数 N,K。接下来 K 行,表示分配糖果时需要满足的关系,每行 3 个数字 X,A,B。如果 X=1.表示第 A 个小

    2022年8月11日
    2
  • Protel 99 SE 的坑

    Protel 99 SE 的坑作为一个电子爱好者,以前画电路图基本都是用笔在草稿纸上面直接画出电路图,然后焊板子~呵呵,有点简单粗暴,这样做的好处就是比较顺手,没那么多限制,但是EDA还是有必要学一下的,思来想去,还是学学Protel99se吧,第一次接触,各种懵比,还犯了许多低级错误,以及系统不兼容的坑,苦逼了…>>>坑1:添加元件库添加元件库:add/Remove选择sch路径点击ddb文件-add

    2022年5月30日
    59
  • aspice培训试题(软件测试教程)

    软件详细设计在ASPICE中代号是SWE3,处于V模型的左侧;软件测试则包含软件单元测试(SWE4),软件集成测试(SWE5)以及软件合格性测试(SWE6)三部分,处于V模型的右侧。下面我会比较详细地介绍一下各过程域的实施要点和迎审会面对的主要问题。软件详细设计软件详细设计要准备的第一份交付件就是:软件详细设计文档!文档的输入是软件的需求,内容应该涵盖数据结构定义,全局变量和宏定义描述,动态行为描述(任务/中断/需求方案分析等),每个函数的实现(输入/输出/返回/伪码等),详细设计评估(关键性、复杂

    2022年4月13日
    333

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号