mirror of
https://github.com/Leo501/CocosCreatorTutorial.git
synced 2026-05-08 06:38:37 +08:00
35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
/**
|
|
*
|
|
* @param {待排序数组} arr
|
|
* @param {不变下标*} targetIdx 当为负数时 全排序
|
|
*/
|
|
function unorder(arr, targetIdx=-1) {
|
|
if (!Array.isArray(arr) || targetIdx > (arr.length - 1)) return -1;
|
|
let dataArr = JSON.parse(JSON.stringify(arr));
|
|
//返回一个非targetIdx的0~endIdx的位置
|
|
function safeIdx(endIdx, targetIdx) {
|
|
if (endIdx < 1 || (endIdx == 1 && targetIdx == 0)) return -1;
|
|
let idx = (Math.random() * endIdx) | 0;
|
|
while (idx == targetIdx) {
|
|
idx = (Math.random() * endIdx) | 0;
|
|
}
|
|
return idx;
|
|
}
|
|
let len = dataArr.length - 1;
|
|
for (let i = len; i > 0; i--) {
|
|
if (i == targetIdx) continue;
|
|
let idx = safeIdx(i + 1, targetIdx);
|
|
if (idx == -1 || idx == i) continue;
|
|
let temp = dataArr[idx];
|
|
dataArr[idx] = dataArr[i];
|
|
dataArr[i] = temp;
|
|
}
|
|
return dataArr;
|
|
}
|
|
|
|
let data = [1, 2, 3, 4, 5];
|
|
for (let i = 0; i < 100; i++) {
|
|
let unOrderArr = unorder(data, -1);
|
|
console.log(`i=${i} unOrderArr`, unOrderArr);
|
|
}
|
|
console.log('end'); |