博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js数组去重
阅读量:6228 次
发布时间:2019-06-21

本文共 2353 字,大约阅读时间需要 7 分钟。

数组去重的方式有很多种,现总结一些备以后查漏补缺来用。

对基本数组类型去重:

(1)set 和 array.from()实现

var str,    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat(arr) {   return  Array.from(new Set(arr))}console.log(removeRepeat(strs)) //["a", "b", "c", "er", "d"]

(2) indexOf和forEach()

var str=[],    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat() {  strs.forEach(v=>{    if(str.indexOf(v) < 0) str.push(v)  })  console.log(str) //["a", "b", "c", "er", "d"]}

(3)map 和 filter

var str=[],    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat(arr) {  const unique = new Map()  return arr.filter(v=>{    return !unique.has(v) && unique.set(v,1)  })} console.log(removeRepeat(strs)) //["a", "b", "c", "er", "d"]

延伸1:需要对数组排序去重

var str=[],    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat(arr) { let arry = arr.sort() return arr.sort().filter((v,index) => {   return !index || v !== arry[index-1] })}console.log(removeRepeat(strs))//  ["a", "b", "c", "d", "er"]

延伸2:某一个元素只出现一次


(1)利用filter,indexof,lastIndexOf对基本类型数组去重复元素

var str,    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat() {    str = strs.filter(function (value, index, array) {        return array.indexOf(value) === array.lastIndexOf(value);    })    console.log(str) //["d"]}

(2)利用lastIndexOf,splice对基本类型数组去重复元素

var str,    strs = ['a', 'b', 'c', 'er', 'd', 'er', 'a', 'b', 'c'];function removeRepeat() {    for (var i = 0; i < strs.length; i++) {        if (i !== strs.lastIndexOf(strs[i])) strs.splice(i, 1);    }    console.log(str) //["d"]}

(1)和(2)的方法大同小异,原理是一样

延伸3:对数组对象进行去重

var Messages = [    {        "timestamp": 1474328370007,        "message": "hello"    },    {        "timestamp": 1474328302520,        "message": "how are you"    },    {        "timestamp": 1474328370007,        "message": "hello"    },    {        "timestamp": 1474328370007,        "message": "hello"    }]var NoRepeatMessages = [];function RemoveRepeat(arr) {    var hashFlag = {}    arr.forEach((v,index) => {        if (!hashFlag[v.timestamp]) {            hashFlag[v.timestamp] = true;            NoRepeatMessages.push(v);        }    });  console.log(NoRepeatMessages) //[{"timestamp": 1474328370007,"message": "hello"},{ "timestamp": 1474328302520,"message": "how are you"}]}RemoveRepeat(Messages)

转载地址:http://usxna.baihongyu.com/

你可能感兴趣的文章
AES加密,解密方法
查看>>
NOIP 2014 提高组 Day1
查看>>
bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战
查看>>
搭建环境
查看>>
【原创】VMWare克隆或复制Linux虚拟机后无法上网的解决
查看>>
C语言中和指针相关的四道题目
查看>>
SSL Labs: Increased Penalty When TLS 1.2 Is Not Supported
查看>>
Python 字符串格式化输出(format/printf)
查看>>
Bzoj3781 小B的询问
查看>>
洛谷P1372 a/b problem
查看>>
UVa11762 Race to 1
查看>>
SQL类型转换和数学函数
查看>>
vue.js的学习
查看>>
插入排序的应用
查看>>
Retrofit2.0中注解使用方式
查看>>
Key-Value Coding Accessor 及其与KVC的关系
查看>>
把购买数据添加到购物车
查看>>
[磁盘空间]lsof处理文件恢复、句柄以及空间释放问题
查看>>
C#操作Control异步工具类
查看>>
由两个栈组成队列
查看>>