2017-01-30 18 views
1

私はInternet Explorer 11でいくつかの問題を引き起こしているAngularJSアプリケーションを持っています - 私の管理領域では、いくつかの問題Internet Explorerを使用したとき、私は私がコードでこの行に移動すると、これが問題になっている部分であるオブジェクトはプロパティまたはメソッド 'findIndex'をサポートしていませんIE11 javascriptの問題

クローム/ Firefoxのなどで(バージョン11特異的に)フィルタリングデータをページに
Object doesn't support property or method 'findIndex' 
at Anonymous function (http://myapp.local/js/controllers/admin/UsersController.js:363:9) 

をしかし細かい気づいています: -

[363] var indexInOriginalSet = $scope.originalSet.findIndex(function(u) { 
[364]  return u.id == userId; 
[365] }); 

このIEの問題をfindIndexで解決するには最高の解決策ですか?あなたがpartirularで、この1をポリフィルを使用することができます

答えて

2

// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex 
if (!Array.prototype.findIndex) { 
    Object.defineProperty(Array.prototype, 'findIndex', { 
    value: function(predicate) { 
    // 1. Let O be ? ToObject(this value). 
     if (this == null) { 
     throw new TypeError('"this" is null or not defined'); 
     } 

     var o = Object(this); 

     // 2. Let len be ? ToLength(? Get(O, "length")). 
     var len = o.length >>> 0; 

     // 3. If IsCallable(predicate) is false, throw a TypeError exception. 
     if (typeof predicate !== 'function') { 
     throw new TypeError('predicate must be a function'); 
     } 

     // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. 
     var thisArg = arguments[1]; 

     // 5. Let k be 0. 
     var k = 0; 

     // 6. Repeat, while k < len 
     while (k < len) { 
     // a. Let Pk be ! ToString(k). 
     // b. Let kValue be ? Get(O, Pk). 
     // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). 
     // d. If testResult is true, return k. 
     var kValue = o[k]; 
     if (predicate.call(thisArg, kValue, k, o)) { 
      return k; 
     } 
     // e. Increase k by 1. 
     k++; 
     } 

     // 7. Return -1. 
     return -1; 
    } 
    }); 
} 

あなたは詳細here

+0

歓声をあなただけ頼むより多くの情報が必要な場合は、私はそのショット – Zabs

+0

を与える;) – rick

+0

拡張に対して私は強くアドバイスをビルトイン。その代わりに、 'Array.prototype'を継承する独自の' prototype'を使うべきです。 – NonPolynomial

3

を見つけることができる私はあなたが何をしたい、それを行うために少し機能を書きました。それは第1パラメータとして配列を、第2パラメータとしてfilter -callbackを期待しています。あなたは、角度CLIを使用してアプリケーションを作成する場合は、IE上(> = 2)アプリケーションそれらの角度でこのエラーを取得している人のために

var findIndex = function(arr, fn) { 
    return arr.reduce(function(carry, item, idx) { 
     if(fn(item, idx)) { 
      return idx; 
     } 

     return carry; 
    } , -1); 
}; 

console.log(findIndex(arr, function(u) { 
    return u.id == userId; 
})); 
0

、あなたはsrcディレクトリにファイルpolyfills.tsを見つけるだろうか、何があります角度CLIで作成したソースファイルのルートディレクトリ、polyfills.tsに次のimport文を見つけて、コメントを解除:

/** IE9, IE10 and IE11 requires all of the following polyfills. **/ 
// import 'core-js/es6/symbol'; 
// import 'core-js/es6/object'; 
// import 'core-js/es6/function'; 
// import 'core-js/es6/parse-int'; 
// import 'core-js/es6/parse-float'; 
// import 'core-js/es6/number'; 
// import 'core-js/es6/math'; 
// import 'core-js/es6/string'; 
// import 'core-js/es6/date'; 
// import 'core-js/es6/array'; 
// import 'core-js/es6/regexp'; 
// import 'core-js/es6/map'; 
// import 'core-js/es6/weak-map'; 
// import 'core-js/es6/set'; 
関連する問題