function removeDuplicate(num){
var out=[];
var obj={};
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
for (x in obj){
out.push(x);
}
return out;
}
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
result = removeDuplicate(theNum);
alert(theNum);
alert(result);
大家好,我是编程的新手,我无法弄清楚这个解决方案是如何工作的,听起来我觉得它为每个元素分配了Zero对象在那个阵列......?
并且对于对象中的每个x,将它们插入到数组中?...此时X的值是什么值?
非常感谢你的帮助
答案 0 :(得分:1)
基本上,这就像哈希集一样。
此for loop
将数组中的每个元素映射为0。
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
// result obj
obj = {1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0}
此for loop
将obj
中的所有密钥复制回数组。
for (x in obj){
out.push(x);
}
// result array
out = [1, 2, 3, 4, 5, 6, 7]
希望它可以帮到你。
答案 1 :(得分:0)
它可以添加任何值。它可以是1或100或任何字符串,对象等。
所有代码都在迭代数组。 它接受该值并将其用作对象的键。 该键用于向对象添加值。如果密钥是重复的,它只是用相同的值覆盖它。 比代码只是遍历对象的键以获得唯一值。
答案 2 :(得分:0)
var theNum = [1,1,2,3,3,3,4,4,5,6,7,7,7];
var uniqueNum = [];
function removeDuplicate()
{
$.each(theNum, function(i, el){
if($.inArray(el, uniqueNum) === -1) uniqueNum.push(el);
});
alert(theNum);
alert(uniqueNum);
}
答案 3 :(得分:0)
在这里,您实际上需要了解这一部分:
for (x = 0; x < num.length; x++){
obj[num[x]]=0;
}
num[x]
将具有重复值,因此每次出现重复值时,它都会再次覆盖相同的值。例如:
在第一次迭代中:
obj[num[x]] = obj[num[0]] = obj[1] = 0;
在第二次迭代中:
obj[num[x]] = obj[num[1]] = obj[1] = 0; //Since num[1] is again 1;
等等。
因此,在上述迭代中,您将覆盖相同的值。因此for循环导致:
obj = {
1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
6 : 0,
7 : 0
}
然后在下一个for循环中,您只需提取keys
(1,2,..)并将其返回:
for (x in obj){
out.push(x);//Push all the keys 1,2,3...
}
return [1,2,3...]//out