2

重複の可能性:
アレイから重複を削除します

手伝ってくれませんか。私はこのコードを持っています。

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

ありがとうございました!

4

1 に答える 1

3

いくつかの(うまくいけば)便利なコードのヒント:

  1. new Array()固定サイズ(異常)の配列を作成する場合を除いて、使用しないでください。[]代わりに使用してください。
  2. arr.push(item)arr[arr.length] = itemより良いことを除いて、と同じものです。
  3. 関数内のそのループは、showを使用して実行できますarray.join(' , ')

とにかく、実際の問題はここにあります:

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#indexOf...とをサポートする最新のブラウザを想定していますArray#filter

于 2012-10-14T15:08:22.590 に答える