数组去重是最常见的面试题,现在总结一下我所知道的几种

首先第一个就是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)

  

最新文章

  1. li进度条宽度和颜色按顺序显示的效果。
  2. es_Linux
  3. 360safe安全卫士防网站攻击源码
  4. OC基础(9)
  5. android学习笔记(入门篇)
  6. poj2586 Y2K Accounting Bug(贪心)
  7. POJ2406 KMP算法
  8. “声控”APP
  9. oschina iOS代码库
  10. XML的序列化和反序列化 详细介绍
  11. 基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念
  12. linux学习笔记-shell-script相关知识
  13. 【XSY2469】graph 分治 并查集
  14. 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?
  15. C#矩阵求逆
  16. 对Faster R-CNN的理解(3)
  17. 各种SQL查询技巧汇总 (转)
  18. vs2008 调试时不会命中断点,源代码与原始版本不同,解决办法
  19. P1126 机器人搬重物
  20. 手打的table

热门文章

  1. pxe问题
  2. 【大数据作业十一】分布式并行计算MapReduce
  3. IDEA实现SpringBoot热部署
  4. golang调用 exec命令 出现too many open files
  5. 【mybatis源码学习】mybatis的参数处理
  6. springboot自动装配redis在pool下偶尔出现连接异常的问题
  7. EF6中的SQL监控
  8. Android 动态更换桌面图标
  9. ISO/IEC 9899:2011 附录C——顺序点
  10. Excel四象限散点图的制作方法