JS里去除数组中的重复值
看到一个去除数组重复值的方法,不明白其中的判断是怎么进行的。一下代码中的a[d]是个什么东西,为什么判断后要给赋成1.<script>Array.prototype.de...
看到一个去除数组重复值的方法,不明白其中的判断是怎么进行的。一下代码中的a[d]是个什么东西,为什么判断后要给赋成1.
<script>
Array.prototype.del = function() {
var a = {}, c = [], l = this.length;
for (var i = 0; i < l; i++) {
var b = this[i];
var d = (typeof b) + b;
if (a[d] === undefined) {
c.push(b);
a[d] = 1;
}
}
return c;
}
alert([1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7].del());
</script> 展开
<script>
Array.prototype.del = function() {
var a = {}, c = [], l = this.length;
for (var i = 0; i < l; i++) {
var b = this[i];
var d = (typeof b) + b;
if (a[d] === undefined) {
c.push(b);
a[d] = 1;
}
}
return c;
}
alert([1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7].del());
</script> 展开
1个回答
展开全部
如果你把测试数组简化为 [1, 2, "2", 2, 3],然后在每一步使用 console.log 输出,看得就清楚了
函数中使用 typeof 是为了区别 2 和 “2”(number 和 string)
Array.prototype.del = function() {
var a = {}, c = [], l = this.length;
for (var i = 0; i < l; i++) {
var b = this[i];
// for 循环第 1 次:1
// for 循环第 2 次:2
// for 循环第 3 次:"2"
// for 循环第 4 次:2
// for 循环第 5 次:3
console.log(b);
var d = (typeof b) + b;
// for 循环第 1 次:number1
// for 循环第 2 次:number2 <--- 重复
// for 循环第 3 次:string2
// for 循环第 4 次:number2 <--- 重复
// for 循环第 5 次:number3
console.log(d);
// for 循环第 1 次:number1 为 undefined
// for 循环第 2 次:number2 为 undefined
// for 循环第 3 次:string2 为 undefined
// for 循环第 4 次:注意 {} 中已经有了 number2,所以不为 undefined
// for 循环第 5 次:number3 为 undefined
console.log(a[d]);
// a[d] 代表将 d 设为 a 的属性,例如 a = {number2},但没有值
if (a[d] === undefined) {
// 1, 2, "2", 3 被 push
c.push(b);
// 这里 = 1 只是给此属性一个值,例如 a = {number2: 1}
a[d] = 1;
// for 循环第 1 次:{number1=1}
// for 循环第 2 次:{number1=1, number2=1}
// for 循环第 3 次:{number1=1, number2=1, string2=1}
// for 循环第 4 次:因为 number2 存在,此次被忽略
// for 循环第 5 次:
// {number1=1, number2=1, string2=1, number3=1}
console.log(a);
}
}
return c;
}
alert([1, 2, "2", 2, 3].del());
更多追问追答
追问
随着循环进行,a的属性是不断变化的还是包含了之前所有的属性?
追答
a 的属性是累加的,也就是变化的,会包含之前添加的属性
第 1 次添加属性 number1
第 2 次添加属性 number2
第 3 次添加属性 string2
第 4 次 因为 a 已经有了属性 number2,也就是重复的数字 2,所以被忽略
第 5 次添加属性 number3
循环结束的时候
a = {number1:1, number2:1, string2:1, number3:1}
c = [1, 2, "2", 3];
a 的四个属性值都为1,这个 1 没有什么实际意义,只是为了完整对象,有属性,有值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询