js 数组去重小技巧

Intro

今天遇到一个问题,需要对数据进行去重,想看一下有没有什么比较方便的方法,果然有些收获。

Question

问题描述:

我有一个这样的数据:

[
{
"ProjectId": "94147992363ef910",
"ProjectName": "新梅太古城中粮天悦澜庭",
"ProjectAddress": "曲阜路966弄"
},
{
"ProjectId": "c5b6ce1988dd2af7",
"ProjectName": "新梅共和城",
"ProjectAddress": "广中西路99弄"
},
{
"ProjectId": "c5b6ce1988dd2af7",
"ProjectName": "新梅共和城",
"ProjectAddress": "广中西路99弄"
}
]

要实现根据 ProjectId 去重,应该得到下面的结果:

[
{
"ProjectId": "94147992363ef910",
"ProjectName": "新梅太古城中粮天悦澜庭",
"ProjectAddress": "曲阜路966弄"
},
{
"ProjectId": "c5b6ce1988dd2af7",
"ProjectName": "新梅共和城",
"ProjectAddress": "广中西路99弄"
}
]

先从一个简单的问题入手,将一个数组去重 [1, 2, 3, 3, 4]

Solution1

通常,我们一般都是这样去做的,将要用于去重的数据放在一个 集合 中,将去重的数据放到一个集合中(最终我们要的数据)

示例代码:

//
var arr = [1, 2, 3, 3, 4];
var result = new Array();
var filterArr = new Array(); for (var i = 0; i < info.length; i++) {
for (var k = 0; k < filterArr.length; k++) {
if (filterArr[i] == arr[i]) {
continue;
}
}
// 或者使用 indexOf 判断
//if (filterArr[i].indexOf(arr[i]) > -1) {
// continue;
//}
filterArr.push(arr[i]);
result.push(arr[i]);
} // filter
arr = arr.filter(function (value, index, array) {
return array.indexOf (value) == index;
});
// es6
arr = arr.filter( (value, index, array) => array.indexOf (value) == index);
//
var info = [
{
"ProjectId": "94147992363ef910",
"ProjectName": "新梅太古城中粮天悦澜庭",
"ProjectAddress": "曲阜路966弄"
},
{
"ProjectId": "c5b6ce1988dd2af7",
"ProjectName": "新梅共和城",
"ProjectAddress": "广中西路99弄"
}
]; function filter() {
var filterArr = [];
var result = [];
for (var i = 0; i < info.length; i++) {
for (var k = 0; k < filterArr.length; k++) {
if (filterArr[i] == info[i].ProjectId) {
continue;
}
}
filterArr.push(info[i].ProjectId);
result.push(info[i]);
}
return result;
}

Solution2

ES6 里提供了 Set 的新语法,Set里不会有重复的元素,简单数组去重用它来实现最简单不过了,举个栗子:

var arr = [1, 2, 3, 3, 4];
console.log(arr); // [1, 2, 3, 3, 4] arr = Array.from(new Set(arr));
console.log(arr);// [1, 2, 3, 4] //
info = info.filter((s => a => !s.has(a.ProjectId) && s.add(a.ProjectId))(new Set));

End

是不是 es6 更方便、更简洁,还没用es6的童鞋强烈建议使用,

上的一坨代码用 es6 只需要一行,只需要一行,只需要一行

info = info.filter((s => a => !s.has(a.ProjectId) && s.add(a.ProjectId))(new Set));

希望你能有所收获

js 数组去重小技巧的更多相关文章

  1. JS数组去重的6种算法实现

    1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...

  2. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  3. JS 数组去重(数组元素是对象的情况)

    js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...

  4. js数组去重常用方法

    js数组去重是面试中经常会碰到的问题,无论是前端还是node.js数组常见的有两种形式,一种是数组各元素均为基本数据类型,常见的为数组字符串格式,形如['a','b','c'];一种是数组各元素不定, ...

  5. JS数组去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  6. js数组去重五种方法

    今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...

  7. js数组去重的方法(转)

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  8. js 数组去重方法汇总

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

  9. js数组去重 javascript版

    //js数组去重 //思路: // 1.放入第一个元素 // 2.放入第n个元素,和第n个之前的元素就行比较,如果有重复,则跳过.没有重复就加入数组中 // 3.返回新的去重后数组 Array.pro ...

随机推荐

  1. CentOS随笔——Service与防火墙关闭

    Service后台服务管理 基本语法 service 服务名 start 开启服务 service 服务名 stop 关闭服务 service 服务名 restart 重启服务 service 服务名 ...

  2. CentOS安装gcc clang git mysql等软件高版本福利

    最近同事需要在单位提供的开发机上临时安装gcc等软件,时间紧迫,因此向其推荐安装福利devtoolset. 感谢devtoolset,使得CentOS软件安装无比的快捷,卸载也是无与伦比的简单. gc ...

  3. Docker基础命令和时区问题

    Docker 命令 1. 安装Docker # ubuntu系统安装 $ sudo apt install docker-ce # 启动docker $ sudo systemctl start do ...

  4. java算法(1)---余弦相似度计算字符串相似率

    余弦相似度计算字符串相似率 功能需求:最近在做通过爬虫技术去爬取各大相关网站的新闻,储存到公司数据中.这里面就有一个技术点,就是如何保证你已爬取的新闻,再有相似的新闻 或者一样的新闻,那就不存储到数据 ...

  5. 微信小程序代码构成

    一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...

  6. asp.net core 系列 2 启动Startup类介绍

    一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...

  7. 浅谈Web开发中的定时任务

    曾经做过Windows server下的定时任务的业务,最近又做了一些Linux下使用Crontab做的定时任务的业务,觉得有必要进行一次小结,于是有了如下这篇文章. Windows Server下 ...

  8. RabbitMQ消息队列(四)-服务详细配置与日常监控管理

    RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sbin/rabbitmq-server -detached ] 查看 ...

  9. Docker系列09—Docker的系统资源限制及验证

    本文收录在容器技术学习系列文章总目录 1.限制容器的资源 默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源.Docker提供了控制容器可以使用多少内存或CPU的方法,设置 ...

  10. DSAPI多功能组件编程应用-网络相关(中)

    [DSAPI.DLL下载地址] 在中篇,我将演示比上篇稍微复杂点的功能.如HTTP监听和局域网广播. 有时,我们会有这样的需求:用户通过浏览器来访问获取数据,我们的程序需要监听指定端口,根据不同的请求 ...