使用Array.Filter即使使用Polyfill也无法在IE 8中工作

时间:2014-01-03 08:58:17

标签: javascript jquery arrays

我在我的项目中使用以下代码: -

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.)按预期工作。

1 个答案:

答案 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"]