js数组去重问题
1. 双层循环:外层循环,内层比较值;
(1)利用splice直接在原数组进行操作
Array.prototype.delRepeat = function (){
var arr = this;
var i,j,len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]
2. 利用对象的属性不能相同的特点进行去重
Array.prototype.delRepeat = function (){
var arr = this;
var i;
var obj = {};
var result = [];
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]
3. 利用ES6的set
(1)利用Array.from将Set结构转换成数组
function delRepeat(array){
return Array.from(new Set(array));
}
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]
(2)拓展运算符(...)内部使用for...of循环
let arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
let resultArr = [...new Set(arr)];
console.log(resultArr);
4.借助indexOf()方法,判断此元素在该数组中首次出现的位置下标与循环的下标是否相等
(1)不借助新数组,使用splice();
var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr){
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
i--;//数组下标回退
}
}
return arr;
} console.log( delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]
(2)借助新数组;
var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) == i) {
result.push(arr[i]);
}
}
return result;
} console.log(delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]
(3)借助新数组 判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
Array.prototype.delRepeat = function(){
var newArr = [];
for(var i = 0; i < this.length; i++){
if(newArr.indexOf(this[i])== -1){
newArr.push(this[i]);
}
}
return newArr;
}
var arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(arr.delRepeat()); // [1, 2, 4, 5, 6, 3, 9]
5. 利用数组中的filter方法
var arr = ['a','f','b','p','e','a','o','f'];
var result = arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
console.log(result); //["a", "f", "b", "p", "e", "o"]
js数组去重问题的更多相关文章
- js数组去重的4种方法
js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...
- JS 数组去重(数组元素是对象的情况)
js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...
- js数组去重常用方法
js数组去重是面试中经常会碰到的问题,无论是前端还是node.js数组常见的有两种形式,一种是数组各元素均为基本数据类型,常见的为数组字符串格式,形如['a','b','c'];一种是数组各元素不定, ...
- js 数组去重小技巧
js 数组去重小技巧 Intro 今天遇到一个问题,需要对数据进行去重,想看一下有没有什么比较方便的方法,果然有些收获. Question 问题描述: 我有一个这样的数据: [ { "Pro ...
- JS数组去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- js数组去重五种方法
今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...
- js数组去重的方法(转)
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- js 数组去重方法汇总
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- js数组去重 javascript版
//js数组去重 //思路: // 1.放入第一个元素 // 2.放入第n个元素,和第n个之前的元素就行比较,如果有重复,则跳过.没有重复就加入数组中 // 3.返回新的去重后数组 Array.pro ...
- js数组去重(多种方法)
// js数组去重 Array.prototype.fun1 = function(){ var arr = this, result = [], i, len = arr.length; for(i ...
随机推荐
- xBIM 基础16 IFC的空间层次结构
系列目录 [已更新最新开发文章,点击查看详细] 本篇介绍如何从文件中检索空间结构.IFC中的空间结构表示层次结构的嵌套结构,表示项目,站点,建筑物,楼层和空间.如果您查看IFC文档, 您会发现 ...
- autocomplete="off" 不起作用解决方案
autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为"o ...
- FCC高级编程篇之Exact Change
Exact Change Design a cash register drawer function checkCashRegister() that accepts purchase price ...
- Vue项目结合vux使用
引入vux 1.直接安装或者更新: npm install vux --save 或者使用 yarn yarn add vux // 安装 yarn upgrade vux // 更新 2.vux2必 ...
- 多任务-进程之PID
1.进程pid,如何在程序中获取我们的进程号,从而查看当前的进程 # -*- coding:utf-8 -*- from multiprocessing import Process import o ...
- 小程序canvas生成二维码图片踩的坑
1:生成临时图片,保证画布被加载以及渲染(即本身不可以 hidden 或是 上级元素不可以 hidden 或是 wx:if 隐藏等) == > 建议:因为 canvas 的组件层级(z-inde ...
- BZOJ 2565 最长双回文串(回文自动机)
题意 给一个长度为N的字符串S.对于一个字符串AB,如果A和B都是回文串,那么称AB是一个双回文串.求问S最长双回文子串的长度?N <= 100000 题解 正反双向构造回文自动机,得到某一个点 ...
- Oracle日期的加减运算
无论是DATE还是timestamp都可以进行加减操作.可以对当前日期加年.月.日.时.分.秒,操作不同的时间类型,有三种方法: 1 使用内置函数numtodsinterval增加小时,分钟和秒2 加 ...
- 你可能需要了解下Laravel集合
前言 集合通过 Illuminate\Support\Collection 进行实例,Laravel的内核大部分的参数传递都用到了集合,但这并不代表集合就是好的.Laravel作为快捷并优雅的开发框架 ...
- 【Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B】 Code For 1
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把序列生成的过程看成一颗树 会发现最后形成的是一颗二叉树. 每个二叉树上的节点就对应了序列中的一个数字. 如果我们把每个节点都往下投 ...