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

时间:2011-07-30 18:19:39

标签: jquery csv

我使用map-function从几个li元素的rel-attributes中生成一个以逗号分隔的列表。

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

我怎样才能确保列表中没有重复内容?

4 个答案:

答案 0 :(得分:2)

你可以像这样制作一个缓存:

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 ,

答案 1 :(得分:1)

你可以这样做:

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(',');

答案 2 :(得分:0)

虽然这不是短暂也不好看,但它应该是一种快速的方式

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;
}

答案 3 :(得分:0)

使用jQuery

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