javascript - jQuery函数从数组中获取所有唯一元素?



6 Answers

只需使用此代码作为简单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]);
javascript jquery jquery-selectors

jQuery.unique允许您获取数组的唯一元素,但文档说该函数主要供内部使用,并且只对DOM元素进行操作。 另一个SO响应表明unique()函数对数字起作用,但是这个用例不一定是未来证据,因为它没有在文档中明确说明。

鉴于此,是否存在一个“标准”jQuery函数,用于仅访问数组中的唯一值(特别是整数等基元)? (显然,我们可以使用each()函数构造一个循环,但我们是jQuery的新手,并且想知道是否有专用的jQuery函数。)




我会使用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/http://jsfiddle.net/3BtMc/4/




这是js1568的解决方案,经过修改后可以处理通用的对象数组,例如:

 var genericObject=[
        {genProp:'this is a string',randomInt:10,isBoolean:false},
        {genProp:'this is another string',randomInt:20,isBoolean:false},
        {genProp:'this is a string',randomInt:10,isBoolean:true},
        {genProp:'this is another string',randomInt:30,isBoolean:false},
        {genProp:'this is a string',randomInt:40,isBoolean:true},
        {genProp:'i like strings',randomInt:60,isBoolean:true},
        {genProp:'this is a string',randomInt:70,isBoolean:true},
        {genProp:'this string is unique',randomInt:50,isBoolean:true},
        {genProp:'this is a string',randomInt:50,isBoolean:false},
        {genProp:'i like strings',randomInt:70,isBoolean:false}
    ]

它接受一个名为propertyName的参数,猜! :)

  $.extend({
        distinctObj:function(obj,propertyName) {
            var result = [];
            $.each(obj,function(i,v){
                var prop=eval("v."+propertyName);
                if ($.inArray(prop, result) == -1) result.push(prop);
            });
            return result;
        }
    });

因此,如果您需要提取给定属性的唯一值列表,例如用于randomInt属性的值,请使用以下命令:

$.distinctObj(genericObject,'genProp');

它返回一个这样的数组:

["this is a string", "this is another string", "i like strings", "this string is unique"] 



您可以使用名为Array Utilities的jQuery插件来获取一系列唯一项。 它可以这样做:

var distinctArray = $.distinct([1, 2, 2, 3])

distinctArray = [1,2,3]




如果您不需要IE支持,则可以使用简单的JavaScript现代解决方案(IE中不支持Array.from )。

您可以使用SetArray.from组合。

var arr = [1, 1, 11, 2, 4, 2, 5, 3, 1];
var set = new Set(arr);
arr = Array.from(set);

console.log(arr);

Set对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。

Array.from方法从类似数组或可迭代的对象创建一个新的Array实例。




Related