Jquery 从逗号分隔列表中删除重复项

Jquery 从逗号分隔列表中删除重复项,jquery,csv,Jquery,Csv,我正在使用map函数从几个li元素的rel属性中生成一个逗号分隔的列表 poiSelectedList = $('#poiList li li.selected').map(function() { return $(this).attr('rel'); }).get().join(','); 如何确保列表中没有重复项?虽然这既不短也不好看,但应该是一种快速方法 var poiSelectedList=''; var tmp; $('#poiList li li.selected').each

我正在使用map函数从几个li元素的rel属性中生成一个逗号分隔的列表

poiSelectedList = $('#poiList li li.selected').map(function() { return $(this).attr('rel'); }).get().join(',');

如何确保列表中没有重复项?

虽然这既不短也不好看,但应该是一种快速方法

var poiSelectedList='';
var tmp;
$('#poiList li li.selected').each(function() { tmp[$(this).attr('rel')]=1; });
var comma=0;
for(var i in tmp) if (tmp.hasOwnProperty(i)){
if(comma){poiSelectedList+=','}else{comma=1}
poiSelectedList+=i;
}

您可以创建如下缓存:

var cache = [];
poiSelectedList = $('#poiList li li.selected').map(function() {
    var rel = $(this).attr('rel');
    if(cache.indexOf(rel) === -1) {
        cache.push(rel);
        return rel;
    } else {
        return undefined;
    }
}).filter(function(a, b) {
   return b !== undefined;
}).get().join(',');

或者,正如patrick dw所建议的,更简洁的版本:

var cache = [];
$('#poiList li li.selected').each(function() {
    var rel = $(this).attr('rel');
    if(!$.inArray(rel, cache)) {
        cache.push(rel);
    }
});
var poiSelectedList = cache.join(); // defaults to ,
你可以做:

var duplicates = {};

poiSelectedList = $('#poiList li li.selected').map(function() { 
     var rel = $(this).attr('rel'); 
     if (duplicates[rel] !== true){
         duplicates[rel] = true;
        return rel;
   }
}).get().join(',');
使用jQuery

var poiSelectedList = $('#poiList li li.selected').map(function() {
    return $(this).attr('rel');});
$.unique(poiSelectedList);
poiSelectedList.get().join(',');

您正在构建一个包含唯一值的数组,因此可以跳过
.filter()
.get()
.join()
和返回语句,并使用
.each()
而不是
.map()
。尽管在某些浏览器中缺少
Array.prototype.indexOf()
。可能需要将其更改为
$.inArray()
。不客气:o) 顺便说一句,我想将正在构建的新数组作为第三个参数传递给
$.grep
$.map
的回调,这样
$.inArray
类测试就可以在新数组本身上执行,而不必维护补充列表。$.unique只适用于dom元素数组。而且,除此之外,我已经在使用jQuery.True,但任何真正的浏览器都能解决这个问题;)不幸的是,它也必须在黑暗的地方工作。无论如何,谢谢你。