首先找一个含有多种类型数据的数组
const pardonArr = [1, 1, 1, 3, 3, 3, 4, 4, 4, 45, 5,
55, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8,
'true', 'true', 'true',true, true,
{name: 1,age: 2}, {name: 1,age: 2}]
通过set方法对数组进行去重尝试,通过Array.from转换成数组类型
let newArr = Array.from(new Set(pardonArr))
console.log(newArr)
会发现除了数组里的对象外,其他类型的数值都完成了去重,基本达到了简易数据的去重需求
要想去重包含对象的数组,推荐使用hasOwnProperty方法来完成
数组还是同样的
var obj = {}; //定义空对象备用
function unique(arr) { //编写去重方法
return arr.filter(function(item, index, arr) {
//利用filter特性,filter(true)时返回所有值,filter(false)时不返回任何值
return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]=true)
})
}
/*通过hasOwnProperty方法判定对象数否具有该值,如果已具有,filter方法会把此处值写进数组,
has方法返回true,为避免第二次写入重复值,has方法判定true即对象内已有此属性即此处数组值已保留,
通过三目运算改写值为false返还给filter方法,如果has方法判定对象内没有此属性,
证明之前未将此值写入数组,故将此处属性写入对象,属性值为任何数均可,
综上,创建的对象内判定没有数组值对应属性,写入属性使has判定为true返还给fliter写入数组,
对象内如已有此值,has判定为true,通过三目运算改写为false返回给filter,
filter判定不予写入数组*/
编写方法来实现功能,数组使用该方法即可完成包含对象的去重
console.log(unique(pardonArr))