JavaScript 数组去重的那几种方法
2024-09-22 11:55:30
数组去重是最常见的面试题,现在总结一下我所知道的几种
首先第一个就是es5 最常见的循环比较
var array= [1, 1, 2];
function test(nums) {
for (var i = 0; i < nums.length; i++) {
for (var j = i + 1; j < nums.length; j++) {
if (nums[i] === nums[j]) {
nums.splice(j, 1);
j--;
}
}
}
console.log(nums); }
test(array)
第二种就是 ES6 的set 方法
var nums = [1, 1, 2]; function test(nums) {
var set = new Set(nums);
console.log(set); }
test(array)
第三种就是利用 indexOf 获取下标的方式来进行判断
var nums = [1, 1, 2]; function test(nums) {
var arr = [];
for (var i = 0; i < nums.length; i++) {
if (arr.indexOf(nums[i]) === -1) {
arr.push(nums[i]);
}
}
console.log(arr); }
test(array)
第四种则是利用对象的特殊属性来进行判断
var nums = [1, 1, 2]; function test(nums) {
var obj = {};
var arr = [];
for (let i = 0; i < nums.length; i++) {
if (!obj[nums[i]]) {
obj[nums[i]] = 1;
arr.push(nums[i]);
}
}
console.log(arr);
}
test(array)
第五种使用 数组的 includes 来进行筛选
var nums = [1, 1, 2]; function test(nums) {
let arr = [];
for (let i = 0; i < nums.length; i++) {
if (!arr.includes(nums[i])) {
arr.push(nums[i]);
}
}
console.log(arr);
}
test(array)
第六种方法则是利用原型上的 forEach 来进行筛选
var nums = [1, 1, 2]; function test(nums) {
var arr = [];
nums.forEach(item => {
arr.includes(item) ? "" : arr.push(item);
});
console.log(arr);
}
test(array)
第七种则是先进行排序,然后再拿每一项和它的后面那一项进行比较,如果不同则加入新的数组
var nums = [1, 1, 2]; function test(nums) {
var arr = [];
var oldArr = nums.sort();
for (let i = 0; i < oldArr.length; i++) {
if (oldArr[i] != oldArr[i + 1]) {
arr.push(oldArr[i]);
}
}
console.log(arr);
}
test(array)
第八种就是利用 数组的 filter 进行过滤
var nums = [1, 1, 2]; function test(nums) {
var newArr = nums.filter((item, index, arr) => {
return arr.indexOf(item) === index;
});
console.log(newArr);
}
test(array)
最新文章
- li进度条宽度和颜色按顺序显示的效果。
- es_Linux
- 360safe安全卫士防网站攻击源码
- OC基础(9)
- android学习笔记(入门篇)
- poj2586 Y2K Accounting Bug(贪心)
- POJ2406 KMP算法
- “声控”APP
- oschina iOS代码库
- XML的序列化和反序列化 详细介绍
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念
- linux学习笔记-shell-script相关知识
- 【XSY2469】graph 分治 并查集
- 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?
- C#矩阵求逆
- 对Faster R-CNN的理解(3)
- 各种SQL查询技巧汇总 (转)
- vs2008 调试时不会命中断点,源代码与原始版本不同,解决办法
- P1126 机器人搬重物
- 手打的table