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

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

  

JavaScript 数组去重的那几种方法的更多相关文章

  1. JavaScript数组去重—ES6的两种方式

    说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...

  2. JavaScript数组去重方法及测试结果

    最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测 ...

  3. javaScript数组去重方法

    在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断 ...

  4. JavaScript 数组去重方法总结

    1.遍历数组法: 这应该是最简单的去重方法(实现思路:新建一新数组,遍历数组,值不在新数组就加入该新数组中) // 遍历数组去重法 function unique(arr){ var _arr = [ ...

  5. JavaScript 数组去重 方法汇总

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. JavaScript数组去重的7种方式

    1.利用额外数组 function unique(array) {    if (!Array.isArray(array)) return;     let newArray = [];    fo ...

  7. javascript数组去重算法-----4(另一种写法__2)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. javascript数组去重算法-----4(另一种写法)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

随机推荐

  1. tomcat的CATALINA_HOME环境变量可以不用设置

    不配置tomcat的环境变量也是可以运行的 用记事本打开tomcat/bin目录下面的startup.bat 在文本的前一部分有下面的脚本代码rem Guess CATALINA_HOME if no ...

  2. GD-GAN: Generative Adversarial Networks for Trajectory Prediction and Group Detection in Crowds

    GD-GAN: Generative Adversarial Networks for Trajectory Prediction and Group Detection in Crowds 2019 ...

  3. Research Guide for Video Frame Interpolation with Deep Learning

    Research Guide for Video Frame Interpolation with Deep Learning This blog is from: https://heartbeat ...

  4. Real-time Multiple People Tracking with Deeply Learned Candidate Selection and Person Re-identification

    Real-time Multiple People Tracking with Deeply Learned Candidate Selection and Person Re-identificat ...

  5. 大div套多个小div,怎样设置外div的高度自适应?

    在最后一个div 后面加上 overflow:hidden;如下: <div style="width:580px; height:auto; margin:0 auto; <d ...

  6. pycharm设置代码行的长度为79字符(PEP8)

    pycharm设置代码行的长度为79字符

  7. js object 添加键值

    第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...

  8. Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)

    The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will ...

  9. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  10. Knockout.js之初印象

    最近在学Knockout.js,想要把看到的东西用blog记录下来. Knockout.js是一个MVVM的框架,突然想起之前有人问我哪些是MVVM框架?我回答了angular.js和bootstra ...