jQuery 中有没有类似 array_unique() 的函数? [复制]

Posted

技术标签:

【中文标题】jQuery 中有没有类似 array_unique() 的函数? [复制]【英文标题】:Is there a function like array_unique() in jQuery? [duplicate] 【发布时间】:2014-10-21 05:11:05 【问题描述】:

我有一个选择,我可以在其中获取一些值作为数组,例如["1","2","3"]

在每次更改时,我都会运行以下代码来获取数组的结果,该数组连接到我从选择中获得的这些值

$('#event-courses-type').on('change',function()

    type = $('#event-courses-type').val();

    console.log(type);

    var var1 = ["4689 Leadership Award", "UKCC Level 1", "UKCC Level 2", "UKCC Level 3", "UKCC Level 4", "Old WHU Award", "None at present"];
    var var2 = ["4689 Leadership Award", "GB-wide Level 1", "Old Level 1 (Pre January 2012)", "Level 2", "Level 3", "EHF", "FIH", "None at present"];

    var var5 = ["D32/33", "A1 Assessor", "CTS", "IAPS", "PTLLS", "AVRA", "Umpire Educator Training", "Umpire Assessor Training"];
    var var6 = ["D32/33", "A1 Assessor", "CTS", "IAPS", "PTLLS", "AVRA", "Umpire Educator Training", "Umpire Assessor Training"];

    var results = [];

    if ($.inArray("1",type) != -1) 
        var results = $.merge(var1, results);
    
    if ($.inArray("2",type) != -1) 
        var results = $.merge(var2, results);
    
    if ($.inArray("5",type) != -1) 
        var results = $.merge(var5, results);
    
    if ($.inArray("6",type) != -1) 
        var results = $.merge(var6, results);
    

    console.log(results);
);

这是我的控制台日志,让您在选择 2 个选项和结果数组后查看类型数组:

["1", "2"] ------------------- add_event.php:802

["4689 Leadership Award", "GB-wide Level 1", "Old Level 1 (Pre January 2012)", "Level 2", "Level 3", "EHF", "FIH", "None at present", "4689 Leadership Award", "UKCC Level 1", "UKCC Level 2", "UKCC Level 3", "UKCC Level 4", "Old WHU Award", "None at present"]

如您所见,有两次“4689 领导奖”,我不希望这种情况发生。在 PHP 中,我使用 array_unique() 函数来消除这些重复值,但我不知道如何在 jQuery 中执行此操作。

【问题讨论】:

jQuery 没有可以做到这一点的方法。但是,使用简单的 for 循环或几种数组方法之一当然可以做到这一点。 我有一个问题,type 是一个值,所以它显然是一个字符串,但是你在$.inArray 中将它用作一个数组,它是如何工作的? 之所以有效,是因为字符串也有一个 indexOf 方法。该代码似乎没有意义,但它肯定会根据 indexOf 的结果做“某事”,这对于选择的每种类型都会有所不同。看起来好像 inArray ins 根本不需要,并且应该能够将字符串值与字符串进行比较。 @KevinB - 我测试了它,所以它知道它实际上可以作为 jQuery 调用 indexOf,我只是想知道 OP 是否知道他为什么在字符串上使用 $.inArray,这很明显不是它的用途。 【参考方案1】:

试试这个:

function unique(array)
  return array.filter(function(el, index, arr) 
      return index == arr.indexOf(el);
  );

工作示例:

const startingArray = [1, 2, 2, 3, 2, 3, 3, 3];

function unique(array)
  return array.filter(function(el, index, arr) 
      return index == arr.indexOf(el);
  );


const uniqueArray = unique(startingArray);

console.log(uniqueArray);

【讨论】:

不错的答案。我喜欢它。我试图找到更多,但我对您的回答感到满意。 还有一个检查对象数组中唯一性的好技巧,您可以在使用此函数之前将其转换为 vetor:const genres = this.state.movies.map(movie => movie.genre); const uniqueGenres = genres.filter((genre, index, arr) => index == arr.indexOf(genre)); return uniqueGenres; @RenanCoelho 的答案是正确的,但可以用这样的方式缩短:this.state.movies.map(e=>e.genre).filter((e, i, a) => i === a.indexOf(e)) 是的,可以,但我更喜欢代码尽可能可读,而不是简短。 ***.com/questions/952194/should-code-be-short-concise 注意,这个方法不会改变传递的数组,所以你应该像array = unique(array);一样调用它。

以上是关于jQuery 中有没有类似 array_unique() 的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

array_unique() 去重复

php [PHP] array_unique在一个多维数组中

PHP使用array_unique对二维数组去重处理

PHP使用array_unique对二维数组去重处理

PHP array_unique

array_unique后,数组本身的值并不会变