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 in an array until the passed function returns true. Returns the remaining elements in the array.
Loop through the array, using Array.slice() to drop the first element of the array until the returned value from the function is true. Returns the remaining elements.
difference
返回两个数组的不同。
创建一个
b
数组的集合,然后使用Array.filter()
对a
数组进行过滤,过滤出不存在于数组b
的元素。关键点是主客体,这里主体应该是第一个数组,也就是
a
,客体是数组b
,返回的是不在主体a
里的数组元素。类似于集合的a - b
,不同点是a
、b
数组都可以有重复的元素存在,而集合不允许重复元素存在。这逻辑是很清晰的,先把
b
数组转成集合存到s
中,然后去filter
数组a
,只要把不存在于s
集合中的元素返回即可。记住filter
返回的是一个数组。differenceWith
从一个数组中筛选出所有不满足指定比较方法运算结果为
true
的元素值的数组。使用
Array.filter()
和Array.find()
来找出适当的值。和
difference
类似,主客体还是第一个数组arr
。我们可以先把意思进行拆分。
comp
运行结果为true
val.find()
去寻找comp(a, b)(a是arr元素,b是val元素)
运行结果为true
的值arr
不要上面第2点中运行结果为true
的值通俗点就是说去遍历数组
arr
的所有元素,然后在数组val
里寻找comp
运算结果不为true的值。因为val.find()
方法如果找到就返回该值,否则返回undefined
,此时!val.find()
就是true
,arr.filter()
正是需要这样运算结果的值。distinctValuesOfArray
返回数组去重结果。
使用
ES6
的集合Set
和ES6
的扩展运算符…
把重复的元素排除掉。实际上
ES6
的集合Set
干的事,没啥可说。dropElements
剔除掉数组元素直到指定方法运算结果第一次为
true
为止。循环一个数组,使用
Array.slice
每次去删除该数组的第一个元素直到指定方法运算结果为true
,返回的是剩余元素组成的数组。这里用
while
进行循环,循环条件是数组的长度大于0
并且数组的第一个元素按照指定方法运行结果为false
,如果满足条件,使用arr.slice(1)
将arr
第一个元素删除掉。直到while
循环退出,返回此时的arr
。这里的边界条件是数组长度为
0
,这时候就不进入while
循环,直接返回空数组。dropRight
返回数组从右边开始剔除掉
n
个元素后的数组。使用
Array.slice()
切掉从右边开始计算的指定数目的元素。n
的默认值是1
,所以不传第二个参数的时候会删掉数组的最后一个元素。-n
不好理解吗?变换一下就好了arr.slice(0, -n)
跟arr.slice(0, arr.length + (-n))
是一样的。slice(m, n)
对应就是[m, n),包含下界,不包含上届。everyNth
返回一个新的数组,数组包含每
nth
的元素,即nth
倍数的元素。使用
Array.filter()
创建一个包含nth
倍数元素的新数组。判断是否
nth
倍数只需要知道该元素的索引加1
后能不能被nth
整除即可。如果是我的话我会这么写
(e, i) => (i + 1) % nth === 0
,可能这样比较符合我的思维习惯。filterNonUnique
过滤掉不唯一元素后返回的数组。
使用
Array.filter()
去筛选满足数组元素唯一性的元素。方法用得很巧,一个数如果出现在一个数组超过一次,那么该数在数组中的左索引
indexOf
(从左边数第一次出现该数的索引)和右索引lastIndexOf
(从右边数第一次出现该数的索引)一定不相等。反过来说左索引等于右索引,该数在数组中只出现一次,满足唯一性。
这里和
distinctValuesOfArray
的区别是,distinctValuesOfArray
删掉了重复的元素,只留一个;filterNonUnique
删掉了所有重复元素,一个不留。flatten
摊平一个数组。
Array.concat()
、空数组[]
和ES6
的扩展运算符…
来摊平一个数组。这里是浅度摊平,即只摊平一层。主要是用
[]
和ES6
的扩展运算符…
对arr
运算结果concat
连接起来。与
deepFlatten
的区别就是flatten
只摊平一层,deepFlatten
深度摊平。个人翻译水平有限,欢迎大家在issues上批评指正。JavaScript30秒, 从入门到放弃之Array(二)
微信公众号:JavaScript30秒, 从入门到放弃之Array(二)
The text was updated successfully, but these errors were encountered: