web-dev-qa-db-ja.com

JavaScript配列内の重複文字列の確認

たとえば、文字列を含むJS配列があります。

var strArray = [ "q", "w", "w", "e", "i", "u", "r"];

配列内の重複文字列を比較する必要があり、重複文字列が存在する場合は、その文字列を指す警告ボックスが必要です。

私はそれをforループと比較しようとしましたが、比較するための事前に決められた文字列なしに、配列が自身の文字列の重複をチェックするようにコードを書く方法がわかりません。

10
Bengall

findDuplicates関数は、配列内のすべてのアイテムのインデックスを、同じアイテムの最初の出現のインデックスと比較します。インデックスが同じでない場合は、重複として返します。

let strArray = [ "q", "w", "w", "w", "e", "i", "u", "r"];
let findDuplicates = arr => arr.filter((item, index) => arr.indexOf(item) != index)

console.log(findDuplicates(strArray)) // All duplicates
console.log([...new Set(findDuplicates(strArray))]) // Unique duplicates
29
Mike Ezzati

ES6機能の使用

function checkIfDuplicateExists(w){
    return new Set(w).size !== w.length 
}
console.log(
    checkIfDuplicateExists(["a", "b", "c", "a"])
// true 
);
console.log(
    checkIfDuplicateExists(["a", "b", "c"]))
//false
}
12
Kamil Naja
var strArray = [ "q", "w", "w", "e", "i", "u", "r", "q"];
var alreadySeen = [];

strArray.forEach(function(str) {
  if (alreadySeen[str])
    alert(str);
  else
    alreadySeen[str] = true;
});

連続していない複製が見つかることを示すために、元の複製をもう1つ追加しました。

3
kshetline

配列でのsome関数の使用:配列内のアイテムの先頭からのインデックス番号が末尾からのインデックス番号と等しくない場合、このアイテムは配列内に複数回存在します。

// Vanilla js
function hasDuplicates(arr) {
    return arr.some( function(item) {
        return arr.indexOf(item) !== arr.lastIndexOf(item);
    });
}
1
Halil Azyikmis

大きな配列を操作する場合は、パフォーマンスを向上させるためにオブジェクトキーを使用します(その場合、各要素をループし、重複をチェックするために再度ループするのは非常に遅くなります)。

var strArray = ["q", "w", "w", "e", "i", "u", "r"];

var counting = {};
strArray.forEach(function (str) {
    counting[str] = (counting[str] || 0) + 1;
});

if (Object.keys(counting).length !== strArray.length) {
    console.log("Has duplicates");

    var str;
    for (str in counting) {
        if (counting.hasOwnProperty(str)) {
            if (counting[str] > 1) {
                console.log(str + " appears " + counting[str] + " times");
            }
        }
    }
}
0
Văn Quyết

次のコードでは、nique-filter(アイテムのすべての出現が最初の出現であるかどうかを確認)から配列内のユニークなアイテムの数をアイテムの総数と比較 =:両方が等しい場合、配列には一意の要素のみが含まれ、それ以外の場合は重複があります。

var firstUnique = (value, index, array) => array.indexOf(value) === index;
var numUnique = strArray.filter(firstUnique).length;
var allUnique = strArray.length === numUnique; 
0
Peter Walser