JS实现数组去重及数组内对象去重功能示例

JS实现数组去重及数组内对象去重功能示例攻略

在JavaScript中,我们经常会用到数组。但是,数组中如果有重复的元素会影响我们的数据操作,因此我们需要进行数组去重操作。在这篇攻略中,我将向您展示如何使用JavaScript实现数组去重及数组内对象去重功能,希望能帮助您更好地理解和应用JS。

数组去重

方法一:使用Set

使用Set可以很方便地去除数组中的重复元素。Set是一种无序且不重复的数据集合。可以使用Set()构造函数创建一个新的Set对象,将数组传入Set()即可将数组去重。具体代码如下:

let arr = [1, 2, 3, 4, 5, 2, 3];
let newArr = [...new Set(arr)];
console.log(newArr); //输出[1, 2, 3, 4, 5]

上述代码中,使用ES6语法解构赋值获取Set返回的集合。Set的特性保证了数组内不会存在重复元素。

方法二:使用Array.filter()

使用Array.filter()方法可以筛选数组中满足条件的元素。先获取数组中第一个元素作为基准元素,循环遍历数组,将不等于基准元素的元素筛选出来,最后将筛选后的数组元素进行集合即可。具体代码如下:

let arr = [1, 2, 3, 4, 5, 2, 3];
let newArr = arr.filter(function (element, index, self) {
   return self.indexOf(element) === index;  // 如果找到了这个元素的下标等于当前元素位置,则说明这个元素是首次出现的,保留 
});
console.log(newArr); //输出[1, 2, 3, 4, 5]

方法三:使用Map

使用Map也可以实现去重操作。我们可以使用Map数据结构的“键”不会重复的特性,将数组中的元素放到Map中做“键”,再获取Map的键即可。如果数组中元素去重后,键和元素是一一对应的,说明去重成功,代码如下:

let arr = [1, 2, 3, 4, 5, 2, 3];
let map = new Map();
let newArr = [];
for (let i = 0; i < arr.length; i++) {
    if (!map.has(arr[i])) {  // 如果map中不存在当前值 
        map.set(arr[i], true); // 把当前元素作为键放入 map 
        newArr.push(arr[i]);  // 把当前元素放入 newArr 
    }
}
console.log(newArr); //输出[1, 2, 3, 4, 5]

数组内对象去重

如果数组内部是对象,我们需要按照对象的某个属性进行去重。例如数组内的对象结构如下:

let arr = [
    {id: 1, name: 'A'},
    {id: 1, name: 'A'},
    {id: 2, name: 'B'},
    {id: 2, name: 'C'},
    {id: 3, name: 'B'}
];

我们需要依据对象中的id属性,将id相同的元素去重。具体代码如下:

function uniqueArray(arr, key) {
  return arr.filter((element, index, self) => {
    return self.findIndex(item => item[key] === element[key]) === index;
  });
}

let newArr = uniqueArray(arr, 'id');
console.log(newArr); 

我们通过在 uniqueArray 函数中使用 Array.filter 方法筛选出满足条件(即id不重复)的数组元素,再返回新的不重复的数组。这里我们使用了函数式编程的思想,使代码量更加简洁。

另外,如果我们需要按照多个属性进行去重呢?在这种情况下,可以扩展一下 uniqueArray 函数,将 key 变成一个数组,然后循环使用 findIndex 方法进行筛选即可。

function uniqueArray(arr, keys) {
  return arr.filter((element, index, self) => {
    return self.findIndex(item => JSON.stringify(item, keys) === JSON.stringify(element, keys)) === index;
  });
}

let newArr = uniqueArray(arr, ['id', 'name']);
console.log(newArr); 

上述代码中,我们使用了JSON.stringify()方法将对象序列化成字符串,在进行比较。比较操作时传入了keys数组,表示只比较keys数组内的属性。

到此,我们已经完成了JS实现数组去重及数组内对象去重的示例攻略。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现数组去重及数组内对象去重功能示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript常见手写题超全汇总

    JavaScript常见手写题超全汇总 1. 前言 在面试以及实际工作中,常常需要手写一些核心的JavaScript代码。这些手写题目可能比较简单、或者非常复杂,但是它们都对JavaScript基础功夫有一个更加深刻的理解。 在本篇文章中,我们将会汇总一些常见的JavaScript手写题,包括但不限于:数组去重、深拷贝、Promise实现、函数柯里化等等。 …

    JavaScript 2023年5月18日
    00
  • JS实现支持Ajax验证的表单插件

    下面是“JS实现支持Ajax验证的表单插件”的完整攻略。 目录 简介 实现步骤 第一步:引入jQuery库 第二步:创建表单 第三步:定义验证规则 第四步:编写Ajax请求 第五步:表单提交事件 示例说明 示例1:验证用户名是否已存在 示例2:验证邮箱格式是否正确 简介 本攻略将要讲解如何使用JavaScript实现支持Ajax验证的表单插件。Ajax验证是…

    JavaScript 2023年6月10日
    00
  • 使用JavaScript实现ajax的实例代码

    使用JavaScript实现ajax的攻略分为以下几个步骤: 1. 准备工作 使用ajax需要使用XMLHttpRequest(XHR)对象,该对象是JavaScript中的原生对象,所以无需下载或引入其他插件。在使用前,需要实例化一个XHR对象,方法如下: var xhr = new XMLHttpRequest(); 2. 发送请求 XHR对象通过ope…

    JavaScript 2023年6月11日
    00
  • JS中用try catch对代码运行的性能影响分析

    JS中的try-catch是用于异常处理的语句。它用于在代码块中捕获发生的异常,并提供适当的处理方式。 然而,try-catch语句并不是一项低成本操作。在代码块中使用try-catch语句将影响代码的性能,因此需要仔细考虑是否使用它。接下来,我将详细讲解如何分析JS中try-catch语句的性能影响。 1. 测试try-catch语句的性能 要测试JS代码…

    JavaScript 2023年5月28日
    00
  • 一个批量编码转换及ASP/JS加解密/简繁转换的工具

    首先,这个工具包含三个主要功能,即批量编码转换、ASP/JS加解密和简繁转换。下面我们分别来讲解。 批量编码转换 这个功能可以将多个文件中的编码方式批量地转换为指定的编码方式。步骤如下: 打开工具界面,点击“批量编码转换”按钮; 选择需要转换的文件夹,并选择原始编码和目标编码方式; 点击“开始转换”按钮,等待转换完成即可。 例如,如果你有一些文件使用的是GB…

    JavaScript 2023年5月19日
    00
  • Flex Javascript交互实现代码

    下面是关于Flex和JavaScript交互实现的完整攻略。 什么是Flex和JavaScript交互? 在Flex应用程序中,我们可以通过JavaScript与应用程序进行交互,实现数据的传输和处理。这种交互包含两个步骤,第一步是Flex从JavaScript中获取数据或调用函数,第二步是JavaScript从Flex中获取数据或调用函数。 在Flex中获…

    JavaScript 2023年6月10日
    00
  • JavaScript实现设置默认日期范围为最近40天的方法分析

    要设置默认日期范围为最近40天,可以通过以下步骤实现: 1.使用JavaScript获取当前时间 首先,我们需要获取当前时间作为默认结束时间。我们可以使用 JavaScript 的 Date() 函数获取当前时间: let now = new Date(); let endDate = now.toISOString().substr(0, 10); 这里,…

    JavaScript 2023年6月10日
    00
  • 详解React中的this指向

    当使用React构建应用程序时,使用this来引用组件实例中的属性和方法可能会变得稍微复杂。在React组件中,this的值可能是 null、 undefined 或指向其他对象。这可能会导致执行时错误或行为不一致的情况出现。 为什么this指向会变化? React组件的 this 值会受到许多因素的影响,主要有以下原因: 在类方法中,this 默认指向组件…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部