0

我使用这个函数来组合两个长度相等的数组的结果

例如:如果我结合两个数组说,Array AArray B

输出将是格式array[Value of Array A]=value of Array B

combined = fields.reduce(function(obj, val, i) {
    obj[val] = edit_opt[i];
    return obj;
}, {});

在 chrome 和 firefox 中测试时,这个函数可以满足我的要求,但是当我在 IE 8,9 中测试我的代码时,我得到了一个错误。我已经在下面发布了消息。

网页错误详情

> User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2;
> Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR
> 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Timestamp: Sat, 21 Jul 2012 10:29:23 UTC


Message: Object doesn't support this property or method
Line: 94
Char: 5
Code: 0
URI: http://x.x.x.x/grid_test/

note: line 94 is the beginning of my combine function.

如何解决这个错误?

4

1 回答 1

1

Array.prototype.reduce是 ECMAScript 5 的补充;因此,它可能不会出现在该标准的其他实现中。

可以通过在脚本开头插入以下代码来解决此问题,从而允许在本机不支持它的实现中使用 reduce。

if (!Array.prototype.reduce) {  
        Array.prototype.reduce = function reduce(accumulator){  
        if (this===null || this===undefined) throw new TypeError("Object is null or undefined");  
        var i = 0, l = this.length >> 0, curr;  

        if(typeof accumulator !== "function") // ES5 : "If IsCallable(callbackfn) is false, throw a TypeError exception."  
          throw new TypeError("First argument is not callable");  

        if(arguments.length < 2) {  
          if (l === 0) throw new TypeError("Array length is 0 and no second argument");  
          curr = this[0];  
          i = 1; // start accumulating at the second element  
        }  
        else  
          curr = arguments[1];  

        while (i < l) {  
          if(i in this) curr = accumulator.call(undefined, curr, this[i], i, this);  
          ++i;  
        }  

        return curr;  
      };    
 }  

资源

于 2012-07-21T10:56:33.103 回答