You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Removes elements from the end of an array until the passed function returns true. Returns the removed elements.
Loop through the array, using a for...of loop over Array.keys() until the returned value from the function is true. Return the removed elements, using Array.reverse() and Array.slice().
对数组元素arr[i]调用func,若真,此时的i就是顺数的第一个该删除的元素的索引,要删除的元素就是从此直到数组结尾为止;即arr.reverse().slice(arr.length - i, arr.length)包含的索引元素。
returnarr;
如果前面的整个遍历过程中func(arr[i])都不为true的话,那就返回原数组,合情合理。
takeWhile
Removes elements in an array until the passed function returns true. Returns the removed elements.
Loop through the array, using a for...of loop over Array.keys() until the returned value from the function is true. Return the removed elements, using Array.slice().
Returns every element that exists in any of the two arrays once, after applying the provided function to each array element of both.
Create a Set by applying all fn to all values of a. Create a Set from a and all elements in b whose value, after applying fn does not match a value in the previously created set. Return the last set converted to an array.
Creates an array of arrays, ungrouping the elements in an array produced by zip.
Use Math.max.apply() to get the longest subarray in the array, Array.map() to make each element an array. Use Array.reduce() and Array.forEach() to map grouped values to individual arrays.
Creates an array of elements, ungrouping the elements in an array produced by zip and applying the provided function.
Use Math.max.apply() to get the longest subarray in the array, Array.map() to make each element an array. Use Array.reduce() and Array.forEach() to map grouped values to individual arrays. Use Array.map() and the spread operator (...) to apply fn to each individual group of elements.
tail
返回除了数组第一个元素以外的所有元素。
如果数组长度大于
1
,则用Array.slice(1)
返回;否则返回整个数组。take
返回一个由数组的前
n
个元素组成的新数组。用
Array.slice()
创建一个新的数组,数组元素由指定数组的前n
个元素组成。n
可以指定为0
,即一个也不取出。省略则n = 1
。takeRight
返回一个由数组的后
n
个元素组成的新数组。用
Array.slice()
创建一个新的数组,数组元素由指定数组的后n
个元素组成。拿数组后
n
个元素只需从**数组长度减去n
**的位置开始取到结尾就可以了,slice
第二个参数是可以省略的,因为是取到最后一个元素。takeRightWhile
从数组尾部开始删除元素,直到对数组元素运用指定方法
fn
为true
为止。同时返回被删除的元素。循环数组,使用
for…of
循环Array.keys()
直到对数组元素调用指定方法返回true
为止。最后返回删除的所有元素,过程中结合了Array.reverse()
和Array.slice()
。循环数组
arr
的key
值,即索引,因为是reverse()
,所以是反向循环。如一个数组有五个元素,那么i
就是4->3->2->1->0
这样的顺序。对数组元素
arr[i]
调用func
,若真,此时的i
就是顺数的第一个该删除的元素的索引,要删除的元素就是从此直到数组结尾为止;即arr.reverse().slice(arr.length - i, arr.length)
包含的索引元素。如果前面的整个遍历过程中
func(arr[i])
都不为true
的话,那就返回原数组,合情合理。takeWhile
从数组索引为
0
开始删除元素,直到对数组元素运用指定方法fn
为true
为止。同时返回被删除的元素。跟
takeRightWhile
正好相反,而且还更容易理解。没什么可说的了。union
返回两个数组的并集(像集合的并集一样,不包含重复元素)。
创建一个以
a
和b
数组为元素的集合并把它转化成数组。我自己写的如下:
直接用
ES6
扩展运算符…
也能达到效果。原理太简单,创建
a
和b
数组的集合自然把他们两者的重复元素去掉了。unionBy
对两个数组的元素分别调用指定方法后,返回以运行结果为判定基准的并集,并集是原始数组元素的并集而不是运行结果的并集。
创建一个
a
数组调用fn
后的集合a1
。再创建一个以数组a
和对数组b
进行过滤所有存在于集合a1
中的元素后所剩余元素组成的数组为基准的集合。并把该集合转换成最终的数组。首先得创建其中一个数组的集合
s
。这里就是把
b
数组中所有存在于a
调用fn
后生成的集合s
的元素都删除掉。这样剩下的所有元素和a
数组再进行集合运算后再转换成数组。就是我们所需要的结果。unionWith
对两个数组的元素分别调用指定比较方法后,返回以运行结果为判定基准的并集,并集是原始数组元素的并集而不是运行结果的并集。
分主客体,这里主体是前一个数组,即
a
,表示数组a
的所有元素都会保留下来。然后循环数组b
,用findIndex
方法去把所有对a
和b
的元素调用comp
比较方法后的结果不存在于a
数组中的所有元素筛选出来。最后把筛选出来的所有元素和数组a
组成新数组后再进行集合运算并把运算结果转化为数组。那就是unionWith
的最终结果。uniqueElements
数组去重。
结合ES6的扩展运算符
…
和集合便很容易实现。unzip
对于给定的多个数组,返回一个新的二维数组,数组的第一个元素包含多个数组的第一个元素,数组的第二个元素包含多个数组的第二个元素,以此类推(即把zip方法分好组的数组逆向解组)。
使用
Math.max.apply()
方法来获取输入数组的子数组元素个数的最大长度,使用Array.map()
来把每一个元素创建成一个数组。然后使用Array.reduce()
和Array.forEach()
去把组里的元素分别加到各自的数组中。这就是
reduce
的初始二维数组,用Array.from
来生成一个数组,然后再map(x => [])
成一个二维数组,那么数组的长度怎么定呢?因为被unzip
的原数组里的元素可能是长度不同的数组。那么肯定是以长度最长的那个为准,这样才能包含解组后的所有元素。这就是length: Math.max(...arr.map(x => x.length))
做的事。对于
reduce
里的方法:acc
是累加值,在遍历过程中会一直变化,val.forEach((v, i) => acc[i].push(v))
这是遍历过程中val
数组元素push
到累加acc
对应索引数组的方法。举个例子:
原数组
arr = [[1, 2, 3], ['a', 'b']]
,在遍历过程中初始累加acc = [[], [], []]
(含有三个元素的数组)。unzipWith
对于给定的多个数组,返回一个新的二维数组,数组的第一个元素包含多个数组的第一个元素,数组的第二个元素包含多个数组的第二个元素,以此类推(即把zip方法分好组的数组逆向解组),在此基础上对二维数组的每个元素运行指定方法并返回。
使用
Math.max.apply()
方法来获取数组的子数组元素个数的最大长度,使用Array.map()
来把每一个元素创建成一个数组。然后使用Array.reduce()
和Array.forEach()
去把组里的元素分别加到各自的数组中。然后再结合Array.map()
和ES6扩展运算符…
把前面生成的二维数组的每个元素分别调用fn
方法。unzipWith
就比unzip
多了一个对每个二维数组元素调用指定fn
方法。即map(val => fn(...val))
。其它都和unzip
一样,没啥可说的了。看以上例子运行结果就知道了。The text was updated successfully, but these errors were encountered: