本文原载于CSDN
(接上一篇,过去了好几个月了,突然想到这里还留了一个坑。。。)
九、entries()
entries()
方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
entries()函数返回的是一个数组的迭代对象,与Generator 函数(可以参考阮一峰大叔写的ES6入门中的介绍Generator 函数)的返回结果是一样的,所以直接通过 .next()
依次得到结果,其中。如下
let arr = [1, 2, 3] |
实现方法的核心就是Generator 函数
。利用其的特性来完成数组的迭代。
Array.prototype.myEntries = function* () { |
十、find()
find()
方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
find()
类似于some()
,不同的是,some()
是判断目标数组中是否含有满足条件的值,返回一个Boolean
类型的值,而find()
是找到目标数组中满足条件的第一个值,并返回该值。使用方法如下:
let arr = [1, 2, 3] |
可见,find()
依旧是通过遍历来查找符合条件的值,实现如下:
Array.prototype.myFind = function(fn, callback) { |
十一、findIndex()
findIndex()
方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
findIndex()
与find()
唯一的区别就是一个返回元素本身,一个返回索引。使用方法如下:
let arr = [1, 2, 3] |
实现方法与find()
的实现也是仅有一点差别,如下:
Array.prototype.myFindIndex = function(fn, callback) { |
十二、flat()
flat()
方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
刚看到的时候一脸懵逼,啥时候居然有这么厉害的方法了。。。flat()
照我的理解就是将一个多维数组转换为低维数组,以及去掉其中的空项,同时,此方法不会改变原数组。使用如下:
// flat 接收一个参数,默认参数值为 1 |
实现的话,二维降一维很简单,通过解构就可以实现,那么多维降维,就需要多次解构,但是这个次数是不一定的,所以可以通过递归实现。实现如下:
Array.prototype.myFlat = function(src = 1, callback) { |
以上有个缺陷,就是对输入的过大的参数没有处理。
十三、includes()
includes()
方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
看到这个方法就想到了some()
,二者有异曲同工之妙,some()
是判断指定数组是否有元素符合条件,而includes()
则将这个条件直接限制为了一个具体的值。使用方法如下:
// includes 接收两个参数,第一个是要查找的值 src,第二个是开始查找的索引 index |
实现方法类似于some()
的实现,不再赘述,直接开始:
Array.prototype.myIncludes = function (src, index = 0) { |
十四丶indexOf
indexOf()
方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
(未完待续)