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

时间:2015-06-04 04:48:25

标签: javascript arrays duplicate-removal

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的值是什么值?

非常感谢你的帮助

4 个答案:

答案 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 loopobj中的所有密钥复制回数组。

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