# pullAt
# Description
根据索引 indexes,移除 array 中对应的元素,并返回被移除元素的数组。
# Params
(array, ...indexes)
# Return
Array
# Depend
import map from './map.js'
import baseAt from './.internal/baseAt.js'
import basePullAt from './.internal/basePullAt.js'
import compareAscending from './.internal/compareAscending.js'
import isIndex from './.internal/isIndex.js'
map 源码分析
baseAt 源码分析
basePullAt 源码分析
compareAscending 源码分析
isIndex 源码分析
# Code
function pullAt(array, ...indexes) {
const length = array == null ? 0 : array.length
const result = baseAt(array, indexes)
basePullAt(array, map(indexes, (index) => isIndex(index, length) ? +index : index).sort(compareAscending))
return result
}
# Analyze
- 首先根据
array
是否存在,拿到length
- 通过
baseAt
拿到该返回的结果,被删除元素的数组 - 调用
basePullAt
进行删除,这里对于indexes
进行了排序和索引转换的处理,也就达到了basePullAt
的条件,升序排列isIndex(index, length) ? +index : index
是索引,则转为number
类型,否则不做处理- 通过
compareAscending
进行排序
# Remark
这里 和 basePullAt 不同的是, basePullAt 返回的是经过处理的原数组,pullAt需要返回的是被删除元素的数组,所以通过 baseAt 来进行返回值的生成,而通过 basePullAt 来处理原数组
这里的排序会有一点问题,lodash 还没有修复,具体可见 compareAscending 中
# Example
我们按照 compareAscending 正确返回的情况下示例
const a = [1,2,3,4,5,6]
console.log(pullAt(a, 0,1,2)) // [ 1, 2, 3 ]
console.log(a) // [ 4, 5, 6 ]
← pullAllWith random →