Rumah > hujung hadapan web > tutorial js > 了解ES6中数组去重的两种方式

了解ES6中数组去重的两种方式

青灯夜游
Lepaskan: 2020-12-16 09:20:06
ke hadapan
2477 orang telah melayarinya

本篇文章给大家介绍一下ES6中数组去重的两种方式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

了解ES6中数组去重的两种方式

相关推荐:《javascript视频教程

ES6中数组去重的两种方式

方法一:

function unique(arr) {
    const res = new Map();
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}
Salin selepas log masuk

就这么短,就可以了,我们来解释一下为什么。

Map对象

Map是ES6 提供的新的数据结构。
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

下表列出了 Map 对象的方法。

方法 描述
clear 删除所有的键/值对,没有返回值。
delete 删除某个键,返回true。如果删除失败,返回false。
forEach 对每个元素执行指定操作。
get 返回Map对象key相对应的value值。
has 返回一个布尔值,表示某个键是否在当前 Map 对象之中。
set 给Map对象设置key/value 键/值对。

Map对象还有一个size属性,他返回Map对象的键/值对的数量。

数组的 filter() 方法

filter() 方法创建一个新的数组,新数组中的元素 是 通过检查 指定数组 中 符合条件的所有元素。

语法:

array.filter(function(currentValue,index,arr), thisValue)
Salin selepas log masuk

参数说明:  

1.png

箭头函数

return arr.filter((a) => !res.has(a) && res.set(a, 1))
//上面的代码可以改成这样
return arr.filter(function(a){
    return !res.has(a) && res.set(a, 1);
});
Salin selepas log masuk
1、箭头函数写代码拥有更加简洁的语法;
2、不会绑定this。

了解更多,点这里

方法一 分析

function unique(arr) {
    //定义常量 res,值为一个Map对象实例
    const res = new Map();
    
    //返回arr数组过滤后的结果,结果为一个数组
    //过滤条件是,如果res中没有某个键,就设置这个键的值为1
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}
Salin selepas log masuk

方法二:

function unique(arr) {
    return Array.from(new Set(arr))
}
Salin selepas log masuk

这个方法的代码量更少,简直不可思议。  
数组的 from方法

Array.from() 方法从一个类似数组或可迭代的对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等) 中创建一个新的数组实例

语法:

Array.from(arrayLike[, mapFn[, thisArg]])
Salin selepas log masuk
参数 描述
arrayLike 必需,想要转换成真实数组的类数组对象或可迭代的对象。
mapFn 可选,如果指定了该参数,则最后生成的数组会经过该函数的加工处理后再返回。
thisArg 可选,执行 mapFn 函数时 this 的值。

示例代码:

const bar = ["a", "b", "c"];
Array.from(bar);
// ["a", "b", "c"]

Array.from('foo');
// ["f", "o", "o"]
Salin selepas log masuk

Set对象

Set 对象允许你存储任何类型的 唯一值 ,无论是原始值或者是对象引用。
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。
Set中的元素只会出现一次,即 Set 中的元素是唯一的。

语法:

new Set([iterable]);
Salin selepas log masuk

参数:  
iterable,如果传递一个可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等),它的所有元素将被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。

下表列出了 Set 对象的方法。

方法 描述
add 添加某个值,返回Set对象本身。
clear 删除所有的键/值对,没有返回值。
delete 删除某个键,返回true。如果删除失败,返回false。
forEach 对每个元素执行指定操作。
has 返回一个布尔值,表示某个键是否在当前 Set 对象之中。

Set对象和Map对象一样,都有一个size属性,他返回Set对象的值的个数。

方法二 分析

function unique(arr) {
    //通过Set对象,对数组去重,结果又返回一个Set对象
    //通过from方法,将Set对象转为数组
    return Array.from(new Set(arr))
}
Salin selepas log masuk

总结

这次说的两个方法,真的很简单,主要就是靠ES6里的新东西,难度不大,代码简单,主要就是多用用就好了。


经人提醒,再补充一种,[...new Set(arr)]  

了解ES6中数组去重的两种方式

不懂 ...  的朋友,可以看这里 js扩展运算符

更多编程相关知识,请访问:编程学习!!

Atas ialah kandungan terperinci 了解ES6中数组去重的两种方式. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan