当前位置:网站首页>JS中对数组进行去重的几种方法
JS中对数组进行去重的几种方法
2022-06-22 06:51:00 【webchang】
代码演示:
let arr = [1,1,'true','true',15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 'a', 'a'];
// 方法1,可以对NaN进行去重,因为 Set 加入值时认为NaN等于自身
function f1(arr) {
// return Array.from(new Set(arr));
return [...new Set(arr)];
}
console.log('方法1:',f1(arr));
// 方法2,不可以对NaN进行去重(indexOf方法无法识别数组的NaN成员)
function f2(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
return result;
}
console.log('方法2:',f2(arr));
// 方法3,使用ES6的findIndex方法,可以结合Object.is()方法对NaN进行去重
// Object.is()方法认为NaN等于自身
function f3(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (result.findIndex(value => Object.is(arr[i],value)) === -1) {
result.push(arr[i]);
}
}
return result;
}
console.log('方法3:',f3(arr));
// 方法4:可以对NaN进行去重
// 数组的includes()方法认为NaN等于自身
function f4(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (!result.includes(arr[i])) {
result.push(arr[i]);
}
}
return result;
}
console.log('方法4:',f4(arr));
// 方法5:这种方法会将NaN跳过去,最后的结果中不会包含NaN
// indexOf内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。
function f5(arr) {
return arr.filter((value,index) => {
return arr.indexOf(value) === index;
});
}
console.log('方法5:',f5(arr));
以上介绍的几种方法大同小异,下边对涉及到NaN的内容进行一个总结:
NaN == NaN // false
NaN === NaN // false
// indexOf方法无法识别数组的NaN成员
[NaN].indexOf(NaN) // -1
// 向 Set 数据结构中加入值时认为NaN等于自身
let set = new Set();
set.add(NaN);
set.add(NaN);
console.log(set); // Set {NaN}
// Object.is()方法认为NaN等于NaN
Object.is(NaN, NaN) // true
+0 === -0 //true
Object.is(+0, -0) // false
// ES2016中新增的数组实例方法:includes()方法认为NaN等于自身
[1, 2, NaN].includes(NaN) // true
前端学习交流QQ群,群内学习讨论的氛围很好,大佬云集,期待您的加入:862748629 点击加入
边栏推荐
- College entrance examination is a post station on the journey of life
- Implement a timer: timer
- Armadillo安装
- C技能树评测——用户至上做精品
- Introduction to 51 Single Chip Microcomputer -- the use of Proteus 8 professional
- Neuron+eKuiper 实现工业物联网数据采集、清理与反控
- 代码的巨大进步
- How to learn 32-bit MCU
- Introduction to 51 Single Chip Microcomputer -- timer and external interrupt
- Literature record (part106) -- graph auto-encoder via neighborhood Wasserstein reconstruction
猜你喜欢

Neuron+eKuiper 实现工业物联网数据采集、清理与反控

Advanced usage of setting breakpoints during keil debugging

leetcode:面试题 08.12. 八皇后【dfs + backtrack】

On the pit of delegatecall of solidity

BlockingQueue four sets of APIs

Callable

Introduction to 51 single chip microcomputer - matrix key

OpenGL - Textures

In depth analysis of 20million OP events stolen by optimization (including code)

Introduction to 51 Single Chip Microcomputer -- the use of Keil uvision4
随机推荐
Clickhouse compares data from two machines
QT connect to Alibaba cloud using mqtt protocol
《数据安全实践指南》- 数据采集安全实践-数据分类分级
仙人掌之歌——进军To C直播(3)
Qt development simple Bluetooth debugging assistant (low power Bluetooth)
仙人掌之歌——进军To C直播(1)
OpenGL - Textures
ReadWriteLock
【M32】单片机 Code、RO Data、RW Data、ZI Data 简单解读
Pytest data parameterization & data driven
OpenGL - Draw Triangle
In depth analysis of 20million OP events stolen by optimization (including code)
Py之scorecardpy:scorecardpy的简介、安装、使用方法之详细攻略
六月集训(第22天) —— 有序集合
[5g NR] ng setup of ngap protocol
【OpenAirInterface5g】RRC NR解析之RrcSetupRequest
5g-guti detailed explanation
Chrome install driver
Cactus Song - online operation (4)
SQL injection vulnerability (XII) cookie injection