1.注意
此方法去重会出现一些小问题(下面列举目前发现的问题)
- 如果数组中存在多个不同对象时,如 [{},{},{name:“a”},{name:“a”}], 去重后只剩下最前面的对象了[{}]
- 如果数组中存在空值empty,如[,],去重后为[undefined],遍历时会把empty空值识别为undefined
2.对象属性特点
一个对象,属性名不可能重复
3.去重
把数组元素当作对象属性名实现去重
- 在数组原型上写一个去重方法(方便只让数组使用)
Array.prototype.noRepeat = function () {
const temp = {};
const arr = [];
const len = this.length;
for (let i = 0; i < len; i++) {
//!temp[this[i]]==true-->temp[this[i]]==false-->当前对象中没有此属性名
if (!temp[this[i]]) {
temp[this[i]] = "hahaha";
arr.push(this[i]);
}
}
return arr;
}
- 测试
const student = {
name: "genius",
age: 18
}
const array = [null, null, {}, {}, true, true, false, false, undefined, undefined, , , 1, 1, student, student, 'a', 'a'];
//打印出原来的数组
console.log(array);
//[null, null, {…}, {…}, true, true, false, false, undefined, undefined, empty × 2, 1, 1, {…}, {…}, "a", "a"]
//打印出去重后的新数组
const newArr = array.noRepeat();
console.log(newArr);
// [null, {…}, true, false, undefined, 1, "a"]
我们可以看见此方法对对象的处理以及对empty空值的处理会存在问题,其他问题尚未发现,欢迎各位小伙伴帮忙解决问题!