汇合数组转换法
/** * * @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);};