如何从数组中删除重复项 - javascript

时间:2012-10-14 15:01:35

标签: javascript arrays

  

可能重复:
  Remove duplicates from array

你能帮我解决一下吗?我有这段代码..

   <html>
  <head>
  <title>test</title>
  <script>

  var array = new Array();

  function insert(val){
  array[array.length]=val;
  }

  function show() {
  var string="";
  for(i = 0; i < array.length; i++) {
  string =string+array[i]+' , ';
  }
  if(array.length > 0)
 document.getElementById('result').innerHTML = string;
  }

  function removeDuplicateElement(arrayName)
            {
                var newArray=new Array();
                label:for(var i=0; i<arrayName.length;i++ )
                {   
                    for(var j=0; j<newArray.length;j++ )
                    {
                        if(newArray[j]==arrayName[i]) 
                        continue label;
                    }
                    newArray[newArray.length] = arrayName[i];
                }
                return newArray;
                document.getElementById('result1').innerHTML = newArray;
            }
  </script>

  </head>

  <body>
  <h2>Demo</h2>
  <form name="form1">
  <input id="userinput" type="text" name="Input"/>
  <input type="button" Value="Add" onclick="insert(getElementById('userinput').value),show();"/>
  <input type="button" Value="Substract" onclick="removeDuplicateElement(array);"/>
  </form>
   <textarea style="border:1px solid #B3B3B3; width:218px;" rows="2" cols="30" type="text"  id="result"></textarea>
   <textarea style="border:1px solid #B3B3B3; width:218px;" rows="2" cols="30" type="text"  id="result1"></textarea>
  </body>
</html>

我正在尝试实现我在互联网上找到的删除重复功能,但没有任何成功。 (见下文)我做错了什么?

function removeDuplicateElement(arrayName)
{
  var newArray=new Array();
  label:for(var i=0; i<arrayName.length;i++ )
  {  
      for(var j=0; j<newArray.length;j++ )
      {
          if(newArray[j]==arrayName[i]) 
          continue label;
      }
      newArray[newArray.length] = arrayName[i];
  }
  return newArray;
}

谢谢!

1 个答案:

答案 0 :(得分:3)

一些(希望)有用的代码提示:

  1. 除非您想制作一个固定大小的数组(不寻常),否则不要使用new Array()。请改用[]
  2. arr.push(item)arr[arr.length] = item相同,只是更好。
  3. show函数中的循环可以使用array.join(' , ')完成。
  4. 无论如何,实际问题在于:

    return newArray;
                document.getElementById('result1').innerHTML = newArray;
    

    return退出该功能。看起来你想要取出return部分。

    ...但无论如何,这段代码非常浪费。我会把它写成:

    function removeDuplicateElements(array) {
        document.getElementById('result1').innerHTML =
            array.filter(function(item, index) {
                return array.indexOf(item) !== index;
            });
    }
    

    ...假设支持Array#indexOfArray#filter的现代浏览器。