JS配列内のある要素の位置を変える関数

2576 ワード

2011,1101更新:atrlさんは1行のコードの実現を提供して、とてもきれいです:
[].splice.apply(arr, [].concat.apply([ toPos ,0], arr.splice(pos,1) ) );

 
———————–
再構築JSが少なくなり、jQueryはよく知らないので、プリセットがあるかどうか分からないので、自分で先に書くしかありません.
function changeArrayItemPos(arr, pos, toPos){
    //         
    toPos = Math.min(Math.max(0, toPos), arr.length - 1);
    //
    if(pos === toPos || pos < 0 || pos > arr.length - 1){ 
        return [].concat(arr);
    }
    
    var _arr = [], after = pos > toPos;
    for(var i = 0, len = arr.length; i < len ; i++){
        //      pass
        if(i === pos){
            continue;
        }else{
            if(i === toPos){
                //                
                if(after){
                    _arr.push(arr[pos]);
                    _arr.push(arr[i]);
                }else{
                    _arr.push(arr[i]);
                    _arr.push(arr[pos]);
                }   
            }else{
                _arr.push(arr[i]);
            }
        }
    }
    return _arr;
}