jQuery - 从字符串数组中删除重复项[重复]

Posted

技术标签:

【中文标题】jQuery - 从字符串数组中删除重复项[重复]【英文标题】:jQuery - remove duplicates from an array of strings [duplicate] 【发布时间】:2012-09-15 02:55:46 【问题描述】:

可能重复:Easiest way to find duplicate values in a javascript arrayjQuery.unique on an array of strings

我正在尝试通过广度优先搜索获取邻居列表(具体而言:Block'd 中相同颜色邻居球的索引) 我的function getWholeList(ballid) 返回一个类似

的数组
thelist=["ball_1","ball_13","ball_23","ball_1"]

当然还有重复。

我尝试使用 jQuery.unique(); 删除它们但我猜它不适用于字符串, 那么有什么办法(使数组独一无二)吗?

感谢您的帮助..

【问题讨论】:

看看这个:***.com/questions/840781/… @kleinohad:将其标记为重复 感谢大家的解答,我在this topic找到了需要的函数 对我来说 $.unique 它有效:jsfiddle.net/8RNYF 【参考方案1】:

jQuery unique method 仅适用于 DOM 元素数组。

您可以使用eachinArray 方法轻松创建自己的uniqe 函数:

function unique(list) 
  var result = [];
  $.each(list, function(i, e) 
    if ($.inArray(e, result) == -1) result.push(e);
  );
  return result;

演示:http://jsfiddle.net/Guffa/Askwb/

【讨论】:

使用grep也不错:function unique(list) return $.grep(list, function(n, i) return list.indexOf(n) == i; ); 【参考方案2】:

作为非 jquery 解决方案,您可以像这样使用数组filter 方法:

var thelist=["ball_1","ball_13","ball_23","ball_1"], 
    thelistunique = thelist.filter(
                 function(a)if (!this[a]) this[a] = 1; return a;,
                 
                );
//=> thelistunique = ["ball_1", "ball_13", "ball_23"]

作为Array.prototype 的扩展(使用缩短的filter 回调)

Array.prototype.uniq = function()
  return this.filter(
      function(a)return !this[a] ? this[a] = true : false;, 
  );

thelistUnique = thelist.uniq(); //=> ["ball_1", "ball_13", "ball_23"]

[Edit 2017] ES6 对此的看法可能是:

const unique = arr => [...new Set(arr)];
const someArr = ["ball_1","ball_13","ball_23","ball_1", "ball_13", "ball_1" ];
console.log( unique(someArr) );

【讨论】:

【参考方案3】:

试试这个 - Array.unique()

Array.prototype.unique =
  function() 
    var a = [];
    var l = this.length;
    for(var i=0; i<l; i++) 
      for(var j=i+1; j<l; j++) 
        // If this[i] is found later in the array
        if (this[i] === this[j])
          j = ++i;
      
      a.push(this[i]);
    
    return a;
  ;
thelist=["ball_1","ball_13","ball_23","ball_1"]
thelist=thelist.unique()

【讨论】:

不要在大型​​数组上尝试这个,这有二次复杂度 这不是也对数组进行排序吗?有时这是不需要的【参考方案4】:

jQuery.unique() 仅适用于 DOM 元素数组。看看这个(unique的增强版):

Enhanced unique

【讨论】:

【参考方案5】:

这里有一个 php array_unique 函数的 JavaScript 端口:http://phpjs.org/functions/array_unique

function array_unique (inputArr) 
    var key = '',
        tmp_arr2 = ,
        val = '';

    var __array_search = function (needle, haystack) 
        var fkey = '';
        for (fkey in haystack) 
            if (haystack.hasOwnProperty(fkey)) 
                if ((haystack[fkey] + '') === (needle + '')) 
                    return fkey;
                
            
        
        return false;
    ;

    for (key in inputArr) 
        if (inputArr.hasOwnProperty(key)) 
            val = inputArr[key];
            if (false === __array_search(val, tmp_arr2)) 
                tmp_arr2[key] = val;
            
        
    

    return tmp_arr2;

或者以后的JS:

arr.filter((v, p) => arr.indexOf(v) == p)

【讨论】:

以上是关于jQuery - 从字符串数组中删除重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 数组删除重复的单词或字符(如果只输入字符。不要从 1 个单词中删除所有重复项

使用循环从字符数组列表中删除重复项? [复制]

文本到字符串数组并删除重复项

删除数组中的重复项

NodeJS:如何从数组中删除重复项[重复]

从数组中删除所有某些重复项[重复]