这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
数组去重的方式and本质。
什么叫做数据去重
什么叫做数据去重这个问题的本质是问:什么叫做重 顾名思义,重就是相同的意思,js判断相同的方式有很多种比如**==**
console.log(null == undefined);
// true
可以得到true,但是换一种
console.log(null === undefined);
// false
就会得到false,再比如:
console.log(NaN === NaN);
// false
也会得到false,再比如:
console.log(Object.is(NaN, NaN));
// true
为什么又得到true了呢?
会发现js本身判断相同的方式得到的结果还不一样,如果加上业务场景,会更复杂。比如:
let obj1 = {
name: 'zs',
id: 1
}
let obj2 = {
name: 'zs',
id: 1
}
console.log(obj1 === obj2);
// false
尽管两个对象长得一模一样,但是因为地址不一样,所以js会判断他们两个不相同。
但是在业务场景下,这两个id一样,那就是同一个人,所以判断两个东西是否相同,要看场景。
去重的本质
讲之前,先看一道经典面试题:
/**
* 数组去重
* 原始值使用严格相等比较
* 对象值递归比较所有属性,,属性数量和属性名称必须必须一致
* 数组中的对象均为planin object
* @param {Array} arr
* @param {Array}
*/
function uniqueArray (arr) {
}
之前的那几种方式好像都不管用,所以问哦们只能用最原始的写法。
/**
* 数组去重
* 原始值使用严格相等比较
* 数组中的对象均为planin object
* @param {Array} arr
* @param {Array}
*/
function uniqueArray (arr) {
let result = []
for (var i = 0; i < arr.length; i++) {
var IsFind = false
for (var j; j < result.length; j++) {
if (IsFind[j] === arr[i]) {
IsFind = true
break;
}
}
if (!IsFind) {
result.push(arr[i])
}
}
return result
}
let Arr1 = [1, 1, 2, 3, 3, 3, 5, 6, 6, 8]
console.log(uniqueArray(Arr1));
总结:
不管什么方法,我们不难发现,其实原理都是差不多,都是循环加判断实现,