实现数组的乱序输出、实现数组去重
文章目录
- 1 实现数组的乱序输出
- 2 实现数组去重
- 2.1 ES5:使用map存储不重复的数字
- 2.2 ES6:使用数据结构集合
1 实现数组的乱序输出
- Fisher-Yates洗牌算法
- Fisher-Yates洗牌算法是一种高效的随机打乱数组或列表的算法。
- 它的核心思想是从数组的末尾开始,逐步将每个元素与一个随机位置的元素交换,直到遍历完整个数组。
- 这种方法确保了每个元素都有相同的概率出现在任何位置,从而实现真正的随机洗牌。
let arr = [1, 2, 3, 4, 5, 6, 7, 8];
function shuffle(arr) {
for (let i = arr.length - 1; i >= 0; i--) {
let change = Math.floor(Math.random() * (i + 1));
[arr[i], arr[change]] = [arr[change], arr[i]];
}
return arr;
}
shuffle(arr);
2 实现数组去重
给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。
2.1 ES5:使用map存储不重复的数字
const arr = [1, 2, 6, 5, 1, 5, 6, 8];
function uniqueArray(arr) {
let map = {};
let result = [];
for (let i = 0; i < arr.length; i++) {
if (!map.hasOwnProperty(arr[i])) {
map[arr[i]] = 1;
result.push(arr[i]);
}
}
return arr;
}
uniqueArray(arr);
2.2 ES6:使用数据结构集合
Array.from(new Set(array));