jQuery.unique可让您获取数组的唯一元素,但文档说该函数主要供内部使用,并且仅对 DOM 元素进行操作。另一个 SO 回应说该unique()
函数适用于数字,但是这个用例不一定是未来的证明,因为它没有在文档中明确说明。
鉴于此,是否有一个“标准”的 jQuery 函数来仅访问数组中的唯一值——特别是像整数这样的基元?(显然,我们可以用该each()
函数构造一个循环,但我们是 jQuery 新手,想知道是否有专门的 jQuery 函数。)
jQuery.unique可让您获取数组的唯一元素,但文档说该函数主要供内部使用,并且仅对 DOM 元素进行操作。另一个 SO 回应说该unique()
函数适用于数字,但是这个用例不一定是未来的证明,因为它没有在文档中明确说明。
鉴于此,是否有一个“标准”的 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;
}
}
只需将此代码用作简单 JQuery 插件的基础即可。
$.extend({
distinct : function(anArray) {
var result = [];
$.each(anArray, function(i,v){
if ($.inArray(v, result) == -1) result.push(v);
});
return result;
}
});
像这样使用:
$.distinct([0,1,2,2,3]);
基于@kennebec 的回答,但通过在数组周围使用 jQuery 包装器来提供缺少的 Array 函数filter
和IE8 及以下版本进行了修复indexOf
:
$.makeArray() 包装器可能不是绝对需要的,但如果你省略这个包装器和 JSON.stringify 否则你会得到奇怪的结果。
var a = [1,5,1,6,4,5,2,5,4,3,1,2,6,6,3,3,2,4];
// note: jQuery's filter params are opposite of javascript's native implementation :(
var unique = $.makeArray($(a).filter(function(i,itm){
// note: 'index', not 'indexOf'
return i == $(a).index(itm);
}));
// unique: [1, 5, 6, 4, 2, 3]
我会使用underscore.js,它提供了一种uniq
方法来做你想做的事。
// for numbers
a = [1,3,2,4,5,6,7,8, 1,1,4,5,6]
$.unique(a)
[7, 6, 1, 8, 3, 2, 5, 4]
// for string
a = ["a", "a", "b"]
$.unique(a)
["b", "a"]
对于 dom 元素,我想这里不需要示例,因为您已经知道了!
这是现场示例的 jsfiddle 链接:http : //jsfiddle.net/3BtMc/4/