1、双重for循环 + splice( )
思路:数组的 splice() 方法删除当前重复元素,第一个参数是开始的值,第二个参数是需要删除的个数。
let arr = ["a", "the", "a", "b", "test", "good", "the", "a", "good", "a"];
// 第一次循环数组
for (let i = 0; i < arr.length; i++) {
// 第二次循环数组
for (let j = i + 1; j < arr.length; j++) {
// 判断条件是:当前数和当前数后一位数相等时
if (arr[i] == arr[j]) {
// 数组的方法删除当前重复的数
arr.splice(j, 1);
// 删除一个数后,数组长度会发生改变
// 所以需要进行自减维持从替换位置比较
j--;
}
}
}
// 输出结果为: ['b', 'test', 'the', 'good', 'a']
console.log(arr);
2、for 循环 + indexOf( )
思路:数组的 indexOf( ) 方法判断是否存在该数,如果不存在则返回 -1。
let arr = [1, 2, 3, 4, 5, 2, 1, 2, 3, 4, 1];
// 定义空数组接收新数组
let temp = [];
for (let i = 0; i < arr.length; i++) {
// 判断新数组是否存在该数,不存在则返回-1
if (temp.indexOf(arr[i]) === -1) {
// 如果不存在该数则把它push()到新数组
temp.push(arr[i]);
}
}
// 输出结果为: [1,2,3,4,5]
console.log(temp);
3、for 循环 + includes ( )
思路:数组的 includes ( ) 方法判断某一数组是否包含某元素 返回的是一个布尔值。
let arr = [1, 2, 3, 4, 5, 2, 1, 2];
// 定义空数组接收新数组
let result = [];
for (let i = 0; i < arr.length; i++) {
// 判断新数组是否存在该数,不存在则返回false
if (!result.includes(arr[i])) {
// 如果不存在该数则push()到新数组
result.push(arr[i]);
}
}
// 输出结果为:[1,2,3,4,5]
console.log(result);
4、new Set( )
思路:ES6中新增的数据类型Set ,特点是其值总是唯一的、不重复的。
let arr = [1, 2, 4, 3, 2, 1, 4, 5];
// 使用...运算符展开去重的数组
let result = [...new Set(arr)];
// 输出结果为: [1, 2, 4, 3, 5]
console.log(result);
5、new Set( ) + Array.from( )
思路:利用Set不重复的特点结合Array.from( )方法将其转化为真实的数组。
let arr = [1, 2, 4, 3, 2, 1, 4, 5];
// Array.from()将set去重后的数值变成真实的数组
let result = Array.from(new Set(arr));
// 输出结果为: [1, 2, 4, 3, 5]
console.log(result);
6、filter( ) + indexOf( )
思路:使用 indexOf( ) 做判断条件,filter( )创建新数组通过返回值为true或false决定是否保留。
let arr = [1, 2, 4, 3, 2, 1, 4, 5];
// 语法:Array.filter(function(currentValue, index, arr), thisValue)
let result = arr.filter((item, index, self) => {
// 当前元素,在原始数组中的第一个索引 === 当前索引值,
return self.indexOf(item) == index;
});
// 输出结果为:[1, 2, 4, 3, 5]
console.log(result);
7、reduce( ) + includes( )
思路:reduce( )遍历和传入一个空数组作为去重后的新数组,然后内部判断新数组中是否存在当前遍历的元素,不存在就插入新数组。
let arr = [1, 3, 4, 2, 1, 4, 2, 5, 3];
// 语法:Array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// total:初始值或计算结束后的返回值, currentValue:当前元素。这两个参数是必填
const newArray = arr.reduce((newArr, element) => {
if (!newArr.includes(element)) {
newArr.push(element);
}
return newArr;
}, []);
// 输出结果为: [1, 3, 4, 2, 5]
console.log(newArray);
8、for循环 + sort( )
思路:首先利用 sort( ) 进行排序。进行循环,如果原数组的第 i 项和新数组的 i - 1 项不一致,就push进去。
let arr = [1, 2, 3, 1, 3, 5, 4, 2, 1, 3];
let newArray = [];
// 首先对原数组进行排序
arr = arr.sort();
for (let i = 0; i < arr.length; i++) {
// 判断条件:当前元素是否与下一个元素相等
arr[i] == arr[i + 1] ? newArray : newArray.push(arr[i]);
}
// 输出结果为:[1, 2, 3, 4, 5]
console.log(newArray);
9、new Map( )
思路:利用Map的键值对同名覆盖,再将Map转数组。
let arr = [1, 2, 3, 2, 4, 1, 5, 2, 4, 2];
// map()方法:返回一个新数组,不会修改原数组,且不会对空数组进行检测。
let map = new Map();
let newArr = [];
for (let i = 0; i < arr.length; i++) {
// has():检测map对象中键是否存在,存在返回true,不存在返回false。
if (!map.has(arr[i])) {
// set():为map对象添加键值对,方法里里面跟两个参数(键,值),如果只传入一个参数,则值为undefine。
map.set(arr[i], true);
newArr.push(arr[i]);
}
}
// 输出结果为:[1, 2, 3, 4, 5]
console.log(newArr);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具