UNPKG

js-wrench

Version:

JS函数库

38 lines (35 loc) 1.24 kB
import isFn from './isFn'; import isNumber from './isNumber'; import isArray from './isArray'; import {splice} from './init'; /** * @description 删除数组元素 * * @param {Array<any>} arr 需要操作的数组 * @param {(Function|number)} iteratee 回调 * @return {*} {Array<any>} 返回新的数组 注意并不是原数组的引用 * @example remove([1,2,3], (v, i, arr) => v === 1) => [2,3]; */ const remove = (arr:Array<any>, iteratee:Function|number):Array<any> => { if(!isArray(arr)) return []; const result:Array<any> = []; const indexs:Array<number> = []; //存放索引, 因为splice后 length会有变化 let index:number = 0; const length:number = arr.length; while(index < length) { let value:any = arr[index]; if(isNumber(iteratee)) { index === iteratee ? indexs.push(index) : result.push(value); }else if(isFn(iteratee)) { if((iteratee as Function)(value, index, arr)) { indexs.push(index); }else { result.push(value); } } index++; } indexs.forEach(i => arr.splice(i, 1)); return result; } export default remove