JavaScript 数组去重的那几种方法
数组去重是最常见的面试题,现在总结一下我所知道的几种
首先第一个就是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 数组去重的那几种方法的更多相关文章
- JavaScript数组去重—ES6的两种方式
说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代 ...
- JavaScript数组去重方法及测试结果
最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测 ...
- javaScript数组去重方法
在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断 ...
- JavaScript 数组去重方法总结
1.遍历数组法: 这应该是最简单的去重方法(实现思路:新建一新数组,遍历数组,值不在新数组就加入该新数组中) // 遍历数组去重法 function unique(arr){ var _arr = [ ...
- JavaScript 数组去重 方法汇总
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- JavaScript数组去重的7种方式
1.利用额外数组 function unique(array) { if (!Array.isArray(array)) return; let newArray = []; fo ...
- javascript数组去重算法-----4(另一种写法__2)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4(另一种写法)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 也谈面试必备问题之 JavaScript 数组去重
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
随机推荐
- tomcat的CATALINA_HOME环境变量可以不用设置
不配置tomcat的环境变量也是可以运行的 用记事本打开tomcat/bin目录下面的startup.bat 在文本的前一部分有下面的脚本代码rem Guess CATALINA_HOME if no ...
- 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 ...
- Research Guide for Video Frame Interpolation with Deep Learning
Research Guide for Video Frame Interpolation with Deep Learning This blog is from: https://heartbeat ...
- 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 ...
- 大div套多个小div,怎样设置外div的高度自适应?
在最后一个div 后面加上 overflow:hidden;如下: <div style="width:580px; height:auto; margin:0 auto; <d ...
- pycharm设置代码行的长度为79字符(PEP8)
pycharm设置代码行的长度为79字符
- js object 添加键值
第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...
- Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)
The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will ...
- [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 ...
- Knockout.js之初印象
最近在学Knockout.js,想要把看到的东西用blog记录下来. Knockout.js是一个MVVM的框架,突然想起之前有人问我哪些是MVVM框架?我回答了angular.js和bootstra ...