在项目开发中,我们可能会遇到需要去除数组中重复元素的情况,这时候就要通过先排序后去重的方式操作。
第一步:我们先通过JavaScript中的reduce用法查看一下每个元素的个数(此步骤不是删除重复元素所必须的):
//定义未排序、有重复元素的数组
var array = [0, 2, 1, 0, 4, 1];
//通过reduce统计数组中每个元素的个数
var arrayInfo = array.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++;
}
else{
pre[cur] = 1;
}
return pre;
},{});
console.log('数组的元素个数',arrayInfo)
第二步:根据第一步结构得出array数组中存在重复的元素,接下来我们需要对array数组中的元素进行排序。(因为本案例中使用的数字数组,也可以使用sort()函数直接排序)。
//定义未排序、有重复元素的数组
var array = [0, 2, 1, 0, 4, 1];
//排序算法:这里使用冒泡排序
var Bubble = function () {
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
[array[j], array[j + 1]] = [array[j + 1], array[j]]
}
}
}
return array;
}
console.log('排序后的数组',Bubble(array))
第三步:对排序后的数组进行去重(因为是基本类型的数组,也可以通过Array.from(new Set(数组))的方式直接进行去重)。我介绍两种方法:
1、在允许定义新数组的前提下
//数组去重函数
var removeDuplicates = function (array) {
//定义空数组存放最终值
var result = [];
array.forEach(element => {
//如果element的值不在result内,就push到result内
if (!(element in result)) {
result.push(element)
}
});
return result;
}
console.log('去重后的结果', removeDuplicates(array))
2、在不允许定义新数组的前提下
//定义数组去重函数(不产生定义新的数组,LeetCode 26.)
var removeDuplicates = function (array) {
let n = array.length;
//如果数组为空数组,直接返回原数组
if (n === 0) {
return array;
} else {
let fast = 1, slow = 1;
while (fast < n) {
if (array[fast] !== array[fast - 1]) {
array[slow] = array[fast];
++slow;
}
++fast;
}
return array.splice(0, slow)
}
}
console.log('去重后的结果',removeDuplicates(array))
这样就完成了“删除数组中重复的元素”的功能啦。
我会将自己平时项目中常见的问题以及笔试面试的知识在CSDN与大家分享,一起进步,加油。