すでに処理されているどの値を追跡する:
var seen = {};
var values = $('div.bob').map(function() {
var value = this.getAttribute('data-xyz');
// or $(this).attr('data-xyz');
// or $(this).data('xyz');
if(seen.hasOwnProperty(value)) return null;
seen[value] = true;
return value;
}).get();
参考:$.map()
これを、当然のことながら、唯一のプリミティブ値で動作します。オブジェクトにマッピングする場合は、オブジェクトのメソッドをtoString()
のようにオーバーライドして、キーとして使用できるようにする必要があります。
やプラグインなど:
(function($) {
$.fn.map_unique = function(callback) {
var seen = {};
function cb() {
var value = callback.apply(this, arguments);
if(value === null || seen.hasOwnProperty(value)) {
return null;
}
seen[value] = true;
return value;
}
return this.map(cb);
});
}(jQuery));
ニース使用! :-) –