从数组中删除重复的元素(利用对象)- Javascript

Removing duplicated element from array (utilizing Object) - Javascript

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);

大家好,我是编程新手,我不知道这个解决方案是如何工作的,在我看来它是为该数组中的每个元素将零分配给该对象......?

对于对象中的每个 x,将它们插入数组?...此时 X 的值是多少?

非常感谢您的帮助

它可以添加任何值。它可以是 1 或 100 或任何字符串、对象等。

所有代码都在遍历数组。 它获取值并将其用作对象的键。 键用于向对象添加值。如果键重复,它只是用相同的值覆盖它。 比代码只是遍历对象的键来获取唯一值。

基本上,这就像一个散列集

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 loopobj 中的所有键复制回数组。

for (x in obj){
    out.push(x);
}

// result array
out = [1, 2, 3, 4, 5, 6, 7]

希望对您有所帮助。

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);
}

这里你其实需要理解这部分:

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,..) 和 return 即可:

for (x in obj){
  out.push(x);//Push all the keys 1,2,3...
}

return [1,2,3...]//out