一行代码取得数组的变更产物

27 阅读1分钟

拒绝使用reduce!

插入元素

function arrayInsert<T>(arr:T[],k:number,newVal:T){
    return arr.slice(0,k).concat([newVal]).concat(arr.slice(k))
}

删除元素

function arrayDelete(arr:any[],k:number){
    return arr.filter((_,index)=>index!==k)
}

替换元素

function arrayReplace<T>(arr:T[],k:number,newVal:T){
    return arr.map((item,index)=>index!==k?item:newVal)
}

移动元素

function arrayMove(arr:any[],from:number,to:number){
    return arrayInsert(arrayDelete(arr,from),to>from?to-1:to,arr[from])
}