javaScript数组中的元素一次性移动到指定位置(包括上下,某元素前后)一步到位

js数组元素移动相信大家都不陌生,单个元素或者连续的几个元素移动到指定位置实现起来比较简单,但是当一次性需要将选中的多个不连续的元素移动到指定的位置,该怎么实现呢?

下面就此次自己在项目中研究,提供一个通用的方法既可以解决单个、连续多个、不连续多个元素移动到指定元素的前或者后面的方法,具体实现代码如下:

/**

* 数组内元素移动到指定位置
* arr : 要操作的数组
* moveIndsArr : 要移动的元素下标数组
* moveToInd : 目标下标值
* isBeforAfter : 移动到目标值前/后(0/1)
* */
moveArray = function (arr, moveIndsArr, moveToInd, isBeforAfter){
var temp = [];
moveIndsArr.sort(function (x,y){return x-y}); 
moveToInd += isBeforAfter;
for(var i=0; i if(moveIndsArr[i] moveToInd -= 1;
}
temp[temp.length] = arr.splice(moveIndsArr[i]-i, 1)[0];
}
temp.unshift(moveToInd,0);
Array.prototype.splice.apply(arr, temp);

}

注意:代码中标红的部位要尤其注意,js中的sort()方法在排序时默认会调用toString方法,所以最终排序的结果并不是按照数字的大小来排列的。如:moveIndsArr=[1,8,10],经过moveIndsArr.sort()排序后的结果是[1,10,8];为了避免这个问题,就可以采用红色部分的方式传进去两个参数来处理实现从小到大排序。当然要想实现从大到小,就改为‘y-x’即可;同时x,y还可以传入对象,然后return就可以写成“return x.属性-y.属性”来实现根据对象的某个属性自由的排序。

毕竟是自己研究写的,大家在使用过程中有什么疑问和建议,欢迎提出,相互学习,谢谢!
在此也特别感谢我的同事(程**)对此方法的大力帮助!

你可能感兴趣的:(前端)