web-dev-qa-db-ja.com

配列Javascriptから重複項目を削除します

重複した値を配列から削除する簡単な方法を探しています。重複があるかどうかを検出する方法を見つけました。値からそれを「プッシュ」する方法がわかりません。たとえば、提供されているリンクに移動して、「abca」と入力すると(各文字の後にReturnキーを押します).. "duplicate!"を警告します

しかし、私はテキストエリアからその重複を削除する方法を見つけたいですか?

http://jsfiddle.net/P3gpp/

これは機能していないと思われる部分です::

sort = sort.Push(i);
textVal = sort;
return textVal;
14
Matthew

なぜ難しいのか、この種の操作専用のjavascriptフィルター関数を使用して簡単に行うことができます。

var arr = ["Apple", "bannana", "orange", "Apple", "orange"];

arr = arr.filter( function( item, index, inputArray ) {
           return inputArray.indexOf(item) == index;
    });


---------------------
Output: ["Apple", "bannana", "orange"]
51
user2668376

User2668376ソリューションに基づいて、これは重複のない新しい配列を返します。

Array.prototype.removeDuplicates = function () {
    return this.filter(function (item, index, self) {
        return self.indexOf(item) == index;
    });
};

その後、次のことができます。

[1, 3, 3, 7].removeDuplicates();

結果は次のようになります。 [1, 3, 7]

4
Frank Roth

これらは、重複を削除するために作成/使用した関数です。

var removeDuplicatesInPlace = function (arr) {
    var i, j, cur, found;
    for (i = arr.length - 1; i >= 0; i--) {
        cur = arr[i];
        found = false;
        for (j = i - 1; !found && j >= 0; j--) {
            if (cur === arr[j]) {
                if (i !== j) {
                    arr.splice(i, 1);
                }
                found = true;
            }
        }
    }
    return arr;
};

var removeDuplicatesGetCopy = function (arr) {
    var ret, len, i, j, cur, found;
    ret = [];
    len = arr.length;
    for (i = 0; i < len; i++) {
        cur = arr[i];
        found = false;
        for (j = 0; !found && (j < len); j++) {
            if (cur === arr[j]) {
                if (i === j) {
                    ret.Push(cur);
                }
                found = true;
            }
        }
    }
    return ret;
};

最初のコードを使用すると、コードは次のようになります。

function cleanUp() {
    var text = document.getElementById("fld"),
        textVal = text.value,
        array;

    textVal = textVal.replace(/\r/g, " ");
    array = textVal.split(/\n/g);

    text.value = removeDuplicatesInPlace(array).join("\n");
}

DEMO:http://jsfiddle.net/VrcN6/1/

4
Ian

Array.reduce() を使用して、重複を削除できます。アイテムが表示された回数を追跡するには、ヘルパーオブジェクトが必要です。

_function cleanUp() 
{
    var textBox = document.getElementById("fld"),
    array = textBox.value.split(/\r?\n/g),
    o = {},
    output;

    output = array.reduce(function(prev, current) {
        var key = '$' + current;

        // have we seen this value before?
        if (o[key] === void 0) {
            prev.Push(current);
            o[key] = true;
        }

        return prev;
    }, []);

    // write back the result
    textBox.value = output.join("\n");
}
_

reduce()ステップの出力を直接使用して、元のソート順に影響を与えることなく、テキスト領域に再度データを入力できます。

Demo

2
Ja͢ck

これはオブジェクトだけで簡単に行えます:

function removeDuplicates(text) {
    var seen = {};
    var result = '';

    for (var i = 0; i < text.length; i++) {
        var char = text.charAt(i);

        if (char in seen) {
            continue;
        } else {
            seen[char] = true;
            result += char;
        }
    }

    return result;
}

function cleanUp() {
    var elem = document.getElementById("fld");

    elem.value = removeDuplicates(elem.value);
}
1
Blender
      arr3 = [1, 2, 3, 2, 4, 5];

      unique = [];

   function findUnique(val)
  {
   status = '0';
   unique.forEach(function(itm){

      if(itm==val)
      { 
      status=1;
      }

              })
 return status;
 }

 arr3.forEach(function(itm){

  rtn =  findUnique(itm);
  if(rtn==0)
  unique.Push(itm);


  });

  console.log(unique);  // [1, 2, 3, 4, 5]
0
sivanthi