最传统的使用循环遍历
//最传统的使用循环遍历
function getUnique(arr) {let newArr = [];for (let i = 0; i < arr.length; i++) {for (let j = i + 1; j < arr.length; j++) {if (arr[i] === arr[j]) {i++; //相同丢掉前面的元素}}newArr.push(arr[i]);}return newArr;
}
利用Set实现
function getUniqueBySet(arr) {return Array.from(new Set(arr));
}
用forEach结合indexOf或includes实现
将不重复的数据项添加到newArr中
function getUniqueByNewArr(arr) {//非重数组let newArr = [];arr.forEach((item) => {if (newArr.indexOf(item) == -1) {newArr.push(item);}// if (!newArr.includes(item)) {// newArr.push(item);// }});return newArr;
}
利用filter+indexOf实现
比较当前元素数组下标和根据indexOf查找的数组下标是否一致,一致则保留。利用indexOf获取的是多个相同元素只获取首次出现的下标,这样保留了首次出现的数据项。
//filter+indexOf去重//`indexOf()` 方法用于查找字符串中指定字符或子字符串的首次出现位置。function getUniqueByFilter(arr) {let result = arr.filter((item, index) => {//比较当前元素数组下标和根据indexOf查找的数组下标是否一致,一致则保留return arr.indexOf(item) === index; //相同数据只保留首次出现});return result;}
reduce+includes方法实现
利用reduce每次循环返回上一步的执行结果,设置每步获取的数组是非重复的。即判断当前循环项是否包含在上一步的数组中,如果不包含,将当前元素追加到上一步执行结果中
//reduce方法实现,利用每次都能获取到上一步的数组执行结果,每次循环将不重复的数据添加并返回
function getUniqueByReduce(arr) {let result = arr.reduce((preResult, item) => {return preResult.includes(item) ? preResult : [...preResult, item];}, []);return result;
}
利用Object.keys实现
利用对象的key值具有唯一性 将数组中元素作为对象的key,之后用Object.keys获取
function getUniqueByObjectKey(arr) {let result = {};arr.forEach((item, index) => {result[arr[index]] = arr[index];});return Object.keys(result).map((item)=>~~item);
}