共计 1086 个字符,预计需要花费 3 分钟才能阅读完成。
汇合数组转换法
/**
*
* @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);
};
正文完
发表至: javascript
2021-03-04