我在我的项目中使用以下代码: -
uniqueArray = checkboxitems.filter(function(elem, pos, self) {
return self.indexOf(elem) == pos;
})
uniqueArray和checkboxitems定义为var uniqueArray/checkboxitems = new Array();
checkboxitems数组包含用于填充复选框并包含重复项的文本值列表。上面的代码在Firefox和谷歌浏览器中运行得很好,但是由于在IE8中缺少.filter和.indexOf,它在该浏览器中不起作用。所以在这里搜索并找到了对mozillas垫片的引用,例如我试图使用它。但它似乎没有用。从不填充res数组,因此我的uniqueArray变量也不会填充。
我也试过这个代码用我的
替换a和唯一数组var a = [1,5,1,6,4,5,2,5,4,3,1,2,6,6,3,3,2,4];
// note: jQuery's filter params are opposite of javascript's native implementation :(
var unique = $.makeArray($(a).filter(function(i,itm){
// note: 'index', not 'indexOf'
return i == $(a).index(itm);
}));
// unique: [1, 5, 6, 4, 2, 3]
取自使用jquery,但这又不起作用。
任何人都有任何想法如何让它发挥作用?
由于 克雷格
更新我现在用过: - jQuery function to get all unique elements from an array?
$.extend({
distinct : function(anArray) {
var result = [];
$.each(anArray, function(i,v){
if ($.inArray(v, result) == -1) result.push(v);
});
return result;
}
});
按我的意愿工作。
然而,我发现的一件事是来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf的代码导致索引值增加1太多!但是,使用此处的代码Fixing JavaScript Array functions in Internet Explorer (indexOf, forEach, etc.)按预期工作。
答案 0 :(得分:0)
我注意到你最初的尝试是原生/普通的JavaScript。我对含糖的内置插件感到皱眉,但我也需要对其进行排序。
if(!Array.prototype.unique) {
Array.prototype.unique = function () {
var nArr = [],
oLen = this.length,
dup, x, y;
for (x = 0; x < oLen; x++ ){
dup = undefined;
for (y = 0; y < nArr.length; y++ ){
if( this[x] === nArr[y] ){
dup = 1;
break;
}
}
if(!dup) { nArr.push(this[x] ); }
}
return nArr;
};
}
var myArr = ["above", "code", "works", "code", "works", "just", "and", "hence"];
var uniqueArr = myArr.unique(); //["above", "code", "works", "just", "and", "hence"]