js 数组去重小技巧
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 数组去重小技巧的更多相关文章
- JS数组去重的6种算法实现
1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...
- js数组去重的4种方法
js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...
- JS 数组去重(数组元素是对象的情况)
js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...
- js数组去重常用方法
js数组去重是面试中经常会碰到的问题,无论是前端还是node.js数组常见的有两种形式,一种是数组各元素均为基本数据类型,常见的为数组字符串格式,形如['a','b','c'];一种是数组各元素不定, ...
- 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 ...
随机推荐
- 最小化JIT示例(仅限Intel x86+Windows)
#include <Windows.h> #include <cstdint> #include <cstring> #define BACK_FILL (0) i ...
- [Swift]LeetCode896. 单调数列 | Monotonic Array
An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...
- ECMAScript5.1的运算符、类型转换总结
一.运算符优先级 从高到低 运算符 说明 () 圆括号 . [] new(带参数列表) 字段访问.数组索引.new(带参数列表) () new(无参数列表) 函数调用,无参数列表 ++(后置递增) - ...
- Bootstrap 字体与图标
常用网站:icons/Font awesome/bookstrap 控制图标的大小使用 fa-lg (33%递增).fa-2x. fa-3x.fa-4x,或者 fa-5x 类 来放大图标.旋转动画 & ...
- asp.net core 系列 10 配置configuration (上)
一. ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration 将从各种配置源提供程序操作键 ...
- ArrayList循环遍历并删除元素的常见陷阱
在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug.不妨把这个问题当做一道面试题目,我想一定能难道不少的人.今天就给大家说一下在ArrayList循环 ...
- 前端笔记之JavaScript(六)让人头疼的正则表达式
一.正则表达式 1.1正则概述和体验 正则表达式是被用来匹配字符串中的字符组合的模式,常用来做表单验证.在JavaScript中,正则表达式也是对象,是一种引用类型. 案例:正确输入一个电话号码,01 ...
- [开源]快速构建一个WebApi项目
项目代码:MasterChief.DotNet.ProjectTemplate.WebApi 示例代码:https://github.com/YanZhiwei/MasterChief.Project ...
- 开源库支付库Magicodes.Pay发布
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前支持以下支付方式和功能: 支付宝APP支付 支付 ...
- 如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇到错误怎么办
平时使用svn的过程中,有的时候由于自己操作故障或者系统原因,导致svn不能更新,提示cleanup也不能成功,陷入了死循环 原因是;svn的数据库队列原因 1,下载sqlite3.exe,googl ...