【发布时间】:2020-11-22 11:42:43
【问题描述】:
这是我的尝试;稍微修改的 Fisher-Yates 算法。我不确定如何确保它是随机的。
const shuffleWithoutMovingFalsies = array => {
const newArray = [...array];
const getRandomValue = (i, N) => ~~(Math.random() * (N - i) + i);
newArray.forEach((elem, i, arr, j = getRandomValue(i, arr.length)) => arr[i] && arr[j] && ([arr[i], arr[j]] = [arr[j], arr[i]]));
return newArray;
}
const array = [1, 2, null, 3, null, null, 4, 5, 6, null];
const shuffledArray = shuffleWithoutMovingFalsies(array);
console.log(shuffledArray);
我所做的只是添加arr[i] && arr[j] && 作为检查以确保要交换的两个元素都不是falsy。
【问题讨论】:
标签: javascript arrays algorithm random shuffle