Jquery 从逗号分隔列表中删除重复项
我正在使用map函数从几个li元素的rel属性中生成一个逗号分隔的列表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
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,但任何真正的浏览器都能解决这个问题;)不幸的是,它也必须在黑暗的地方工作。无论如何,谢谢你。