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. [Swift]LeetCode714. 买卖股票的最佳时机含手续费 | Best Time to Buy and Sell Stock with Transaction Fee

    Your are given an array of integers prices, for which the i-th element is the price of a given stock ...

  2. [Swift]LeetCode894. 所有可能的满二叉树 | All Possible Full Binary Trees

    A full binary tree is a binary tree where each node has exactly 0 or 2 children. Return a list of al ...

  3. [Swift]LeetCode973. 最接近原点的 K 个点 | K Closest Points to Origin

    We have a list of points on the plane.  Find the K closest points to the origin (0, 0). (Here, the d ...

  4. JVM基础系列开篇:为什么要学虚拟机?

    跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并 ...

  5. Django2.1.2创建默认管理后台

    1.在app的models.py中添加以下代码: from django.db import models # Create your models here. # Register your mod ...

  6. ASP.NET Core 四种方式绑定枚举值

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

  7. Unity 点乘&叉乘 应用实例

    一 前言 1.概述 主要概述了点乘,叉乘的实用例子,没有讲述什么原理性的,偏向应用层.点乘叉乘数学原理性的东西比较“难记”,网上很多.实用举例,网上算是比较少吧.故,来总结一番. 2.可以解决的问题 ...

  8. redis 系列6 数据结构之字典(下)

    一.概述 接着上篇继续,这篇把数据结构之字典学习完, 这篇知识点包括:哈希算法,解决键冲突, rehash , 渐进式rehash,字典API. 1.1 哈希算法 当一个新的键值对 需要添加到字典里面 ...

  9. Android_ FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...

  10. Chapter 5 Blood Type——17

    "I'll be coming around with a dropper of water to prepare your cards, so please don't start unt ...