1. ホーム
  2. javascript

配列からすべてのユニークな要素を取得するためのjQuery関数?

2023-11-03 01:45:02

質問

jQuery.unique は配列のユニークな要素を取得することができますが、ドキュメントによるとこの関数はほとんど内部使用で、DOM要素にのみ作用するそうです。別の SO の回答では unique() 関数は数字で動作したが、ドキュメントに明示されていないため、このユースケースは必ずしも将来的に保証されるものではないと述べています。

これを考えると、配列内の一意の値 (具体的には、整数のようなプリミティブ) のみにアクセスするための "standard" jQuery 関数はあるのでしょうか? (明らかに、私たちは each() 関数でループを構築できますが、私たちはjQueryに慣れておらず、このための専用のjQuery関数があるかどうかを知りたいのです)。

どのように解決するのですか?

この場合 array.filter を使うと、各個別の値の最初の項目を返します。

var a = [ 1, 5, 1, 6, 4, 5, 2, 5, 4, 3, 1, 2, 6, 6, 3, 3, 2, 4 ];

var unique = a.filter(function(itm, i, a) {
    return i == a.indexOf(itm);
});

console.log(unique);

IE8以下のサポートが第一の場合、サポートされていない filter メソッドを使用しないでください。

それ以外の場合は

if (!Array.prototype.filter) {
    Array.prototype.filter = function(fun, scope) {
        var T = this, A = [], i = 0, itm, L = T.length;
        if (typeof fun == 'function') {
            while(i < L) {
                if (i in T) {
                    itm = T[i];
                    if (fun.call(scope, itm, i, T)) A[A.length] = itm;
                }
                ++i;
            }
        }
        return A;
    }
}