去重系列
TIP
去重是非常常用的方法,下面咱们就写几个小例子一块复习下去重。
Array.form + new Set
js
// 使用 Array.form 搭配 new set 可实现数组字符串、布尔简单数组去重
// 不能对数组对象去重。
const uniq = (data) => {
return Array.form(new Set(data));
}
for + for 实现对简单数组去重
js
const uniq = (data) => {
const results = [];
for (let i = 0; i < data.length; i++) { // 循环原数据
const element = data[i];
let uniqFlag = false;
for (let j = 0; j < results.length; j++) { // 循环已去重后的数据
const resItem = results[j];
if(resItem === element) {
uniqFlag = true;
break;
}
}
if(!uniqFlag) {
results.push(element); // 如果uniqFlag === false 就证明results 还没有该数据
}
}
return results;
}
一层 for 对简单数据去重
js
const uniq = (data) => {
const results = [];
const resultMap = {};
for (let i = 0; i < data.length; i++) {
const element = data[i];
if(!resultMap[element]) {
resultMap[element] = true;
results.push(element)
}
}
return results;
}
WARNING
以上就是对简单数组去重的几个小函数,建议使用最后一个一层for性能最佳,下面咱们实现对数组对象去重。
for 对数组对象去重
js
const uniqBy = (data, key) => {
const results = [];
const resultMap = {};
for (let i = 0; i < data.length; i++) {
const element = data[i];
if(!resultMap[element[key]]) {
resultMap[element[key]] = true;
results.push(element)
}
}
return results;
}
WARNING
以上就是对数组去重的几个小例子,lodash
工具库有相关uniq
和uniqBy
方法可以直接用,但是还是在会自己写的基础上去用吧。