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
Gets n random elements at unique keys from array up to the size of array.
Shuffle the array using the Fisher-Yates algorithm. Use Array.slice() to get the first n elements. Omit the second argument, n to get only one element at random from the array.
Returns the lowest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
Check if the array is sorted in descending order (loosely). Use Array.findIndex() to find the appropriate index where the element should be inserted, based on the iterator function fn.
Returns the highest index at which value should be inserted into array in order to maintain its sort order.
Check if the array is sorted in descending order (loosely). Use Array.map() to map each element to an array with its index and value. Use Array.reverse() and Array.findIndex() to find the appropriate last index where the element should be inserted.
Returns the highest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
Check if the array is sorted in descending order (loosely). Use Array.reverse() and Array.findIndex() to find the appropriate last index where the element should be inserted, based on the iterator function fn..
sampleSize
从给定的数组中随机选出指定个数的数组元素。
用 Fisher-Yates 算法将数组洗牌(打乱顺序)。然后使用
Array.slice()
来截取数组的前n
个元素。如果省略第二个参数n
,按n=1
处理,即仅取一个随机元素。关键点是这个
while
循环,按数组初始长度m
每次递减1循环,然后结合Math.floor
和Math.random
在m
范围内生成一个随机索引。用该索引对应的数组元素与索引m-1(即未交换过的最后一个元素)
对应数组元素交换位置。循环结束,数组洗牌成功。最后返回被截取的前
n
个元素。shuffle
对指定数组进行随机排序并返回排好序的新数组。
用 Fisher-Yates 算法将数组洗牌(打乱顺序)并返回排好序的新数组。
这就是前面
sampleSize
用到的算法,注意的是返回的是新的数组,不是在原数组上进行排序的。similarity
返回一个包含两个数组的共同元素的数组。
使用
Array.filter()
结合Array.includes()
把一个数组中不属于第二个数组values
的元素都剔除。filter
的主体是第一个数组arr
,最终将不满足条件的元素剔除掉。那么不满足的条件又是什么呢?条件是第一个数组
arr
不在第二个数组values
里的所有元素,也即仅保留满足values.includes(v)
的所有元素。sortedIndex
返回一个元素应该插入到已知排好序的数组并且不改变该数组排序方式的最小索引。
检查一个数组是否已经按降序排列(松散的),然后使用
Array.findIndex()
去找出指定的元素应该插在数组中合适位置的索引并返回。之所以叫
sortedIndex
是因为数组已经排序了,但升序降序未知。为此只需比较数组第一个元素arr[0]
和数组最后一个元素arr[arr.length - 1]
的大小即可判断升降序。这里有一个三元运算表达式:
如果是降序的,判断数组
arr
元素el
是否小于或者等于指定元素n
,也就是说,当满足指定数组元素n
首次大于或者等于arr
遍历过程中任意一个元素el
的时候,就返回此时的索引。否则判断数组arr
元素el
是否大于或者等于指定元素n
,寻找过程与前边类似。最后,判断所找索引
index
是否为-1
,若是,说明n
比arr
所有元素要小,应该放在arr
最后一位,即index = arr.length
;否则直接返回索引index
。sortedIndexBy
返回一个元素应该插入到已知排好序的数组并且不改变该数组排序方式的最小索引,前提是受一个指定的方法支配。
检查一个数组是否已经按降序排列(松散的),然后使用
Array.findIndex()
去找出指定的元素应该插在数组中合适位置的索引并返回,前提是受一个指定的方法支配。sortedIndexBy
跟sortedIndex
字面上只差一个By
,一般而言By
有基于xx的意思。这里就是基于某个方法
fn
,意即在findIndex
找合适元素的时候指的是对元素调用fn
后的结果来进行比较,而不是元素本身。另外要注意的是,判断原数组arr
升降序是也是fn
调用结果的升降序,而不是元素本身的升降序。sortedLastIndex
返回一个元素应该插入到已知排好序的数组并且不改变该数组排序方式的最大索引(从右边数的最小索引)。
检查一个数组是否已经按降序排列(松散的),然后使用
Array.map()
把原数组map
一个包含索引和元素值的二维数组,在此map
后的数组上用Array.findIndex()
去找出指定的元素应该插在数组从右边数的合适位置的索引并返回。首先用原数组
arr
去map
一个二维数组,至于为什么一定要去map
待会再讲。然后
reverse()
去把map
后的二维数组翻转。最后在翻转数组基础上去查找对应索引:
这里不难看出
sortedLastIndex
和sortedIndex
的三元运算表达式是不一样的。sortedLastIndex
此时是对一个二维数组进行findIndex
查找,二维数组的第二个元素即el[1]
才是值,所以要跟它比较。sortedLastIndex
的二维数组是经过翻转的,即如果本来数组是降序的,翻转后为升序,所以应该找元素n
首次满足小于或等于数组元素el[1]
的索引,而sortedIndex
显然相反。最终再对找出来的是索引
index
进行判断,如果index === -1
,那么应该返回0
,怎么讲?对于
-1
来说,从右边数起,把整个数组数完了,都没有找到能放它的位置,那么只有数组第一个位置符合它。如果
index !== -1
,也就是找到一个合适的索引,但是这个index
是从右边数的,转换成从左边数的索引就是arr.length - index
,(原文是arr.length - index - 1)我认为是错的。举个例子:接着前面说的为什么一定需要
map
,map
是返回一个新的数组而不改变原数组,arr.reverse()
是会直接改变原数组arr
的,arr.map(fn).reverse()
则不会改变arr
而只是改变了arr.map(fn)
后返回的数组。然而我个人觉得
map
的时候没必要返回一个二维数组,直接一维数组就可以了,因为后续根本用不到map
后的第一个元素el[0]
即它对应的索引。如:
结果一样,并且原数组
arr
并未改变。sortedLastIndexBy
返回一个元素应该插入到已知排好序的数组并且不改变该数组排序方式的最大索引(从右边数的最小索引),前提是受一个指定的方法支配。
检查一个数组是否已经按降序排列(松散的),然后使用
Array.reverse()
和Array.findIndex()
去找出指定的元素应该插在数组从右边数的合适位置的索引并返回,前提是受一个指定的方法支配。这个跟前面的
sortedLastIndex
差别其实就是是否调用fn
后再比较的问题,没啥可说的了。symmetricDifference
返回两个数组中对称不相同的元素(简单说就是数组
a
中不存在于数组b
中的所有元素加上数组b
中不存在于数组a
中的所有元素)。对两个数组分别创建其集合。然后分别使用
Array.filter()
过滤出不存在于对方的所有元素。其实前面的解释就已经很清楚了。主要看
return
那行:a.filter(x => !sB.has(x))
这里保留a
数组里所有不在b
数组的集合里的元素,加上…
展开运算符把这些元素拼接成数组,同理,对b
数组也一样。symmetricDifferenceBy
返回两个数组中对称不相同的元素,前提是对两个数组所有元素调用指定方法后。(简单说就是数组
a
中不存在于数组b
中的所有元素加上数组b
中不存在于数组a
中的所有元素,前提是调用指定方法后)。对两个数组分别调用指定方法后创建其集合。然后分别使用
Array.filter()
过滤出不存在于对方的跟
symmetricDifference
的不同点在于多了一个fn
,所以在创建集合之前,要先对数组元素map
一个对所有元素运用fn
的方法。再各自过滤的时候也同样使用fn
对数组元素进行调用。symmetricDifferenceWith
返回两个数组中对称不相同的元素,前提是使用一个指定的比较方法进行比较。
使用
Array.filter()
和Array.findIndex()
来找出符合条件的所有元素。这个就是对数组
arr
,过滤出对数组arr
和val
所有元素调用comp
方法后结果不同的所有元素。同理对数组val
也一样。然后两者的结果拼接成最终的结果。The text was updated successfully, but these errors were encountered: