集合数组转换法
/**
*
* @param {Array} data
*
* 思路
* 1.将数组转成Set集合对象
* 2.然后将集合对象转成数组
*/
const unique = (data) => {
return Array.from(new Set(data));
};
查找尾部替换法
/**
*
* @param {Array} data
*
* 思路:
* 1.查找每一项是否出现在后面的所有项中
* 2.如果存在,将当前项替换为数组最后一项
* 3.同时将数组长度减一
* 4.再用当前替换过来的项,与后面的所有项比较,重复步骤一
*/
const unique = (data) => {
for (let i = 0; i < data.length - 1; i++) {
if (data.slice(i + 1).indexOf(data[i]) > -1) {
data[i] = data[data.length - 1];
data.length--;
i--;
}
}
return data;
};
清空过滤法
/**
*
* @param {Array} data
*
* 思路:
* 1.查找每一项是否出现在后面的所有项中
* 2.如果存在,将当前项替换为null
* 3.过滤掉所有为null的项
*/
const unique = (data) => {
for (let i = 0; i < data.length - 1; i++) {
if (data.slice(i + 1).indexOf(data[i]) > -1) {
data[i] = null;
}
}
return data.filter((v) => v !== null);
};
查找删除法
/**
*
* @param {Array} data
*
* 思路:
* 1.查找每一项是否出现在后面的所有项中
* 2.如果存在,将当前项用splice去除
* 3.避免数组塌陷,所以要在下一次循环时将数组下表变为当前下表,即i--
*/
const unique = (data) => {
for (let i = 0; i < data.length - 1; i++) {
if (data.slice(i + 1).indexOf(data[i]) > -1) {
data.splice(i, 1);
i--;
}
}
return data.filter((v) => v !== null);
};
对象特性去重法
/**
*
* @param {Array} data
*
* 思路:
* 1.对象的键名不允许重复
* 2.将数组遍历,把每一项当做键名和键值
* 3.拿出对象的keys或者values
*/
const unique = (data) => {
const obj = {};
for (let i = 0; i < data.length - 1; i++) {
obj[data[i]] = data[i];
}
return Object.values(obj);
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。