81 votes

"L'objet ne prend pas en charge la propriété ou la méthode 'find'" dans IE

 <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

    <script>

        $(document).ready(function () {


            var data = [{
                "Id": "SWE",
                "Country": "Sweden",
                "Population": 9592552
            }, {
                "Id": "NOR",
                "Country": "Norway",
                "Population": 5084190
            }];


            function display(e) {
                alert("E" + e);
                var countryData = data.find(function (element, index, array) {
                    return element.Id === e;
                });
                alert(countryData.Population);
            }
            display('SWE');


        });


    </script>
</head>
</html>
 

Le code affiché ci-dessus fonctionne correctement sur Firefox et Chrome, mais je reçois une erreur dans Internet Explorer. Message d'erreur:

Object doesn't support property or method 'find'

56voto

Mahib Points 2018

Voici un travail autour. Vous pouvez utiliser le filtre au lieu de rechercher; mais le filtre retourne un tableau d'objets correspondants. find ne renvoie que la première correspondance dans un tableau. Alors, pourquoi ne pas utiliser le filtre comme suit;

 data.filter(function (x) {
         return x.Id === e
    })[0];
 

46voto

Ogglas Points 1

Comme mentionné array.find() n'est pas pris en charge dans IE.

Toutefois, vous pouvez lire sur un Polyfill ici:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill

Cette méthode a été ajoutée à l'ECMAScript 2015 spécification et peuvent ne pas être disponibles dans toutes les implémentations JavaScript encore. Cependant, vous pouvez polyfill Tableau.le prototype.trouver avec l'extrait de code suivant:

Code:

// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
  Object.defineProperty(Array.prototype, 'find', {
    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 kValue.
        var kValue = o[k];
        if (predicate.call(thisArg, kValue, k, o)) {
          return kValue;
        }
        // e. Increase k by 1.
        k++;
      }

      // 7. Return undefined.
      return undefined;
    }
  });
}

40voto

Simba Points 893

Vous êtes à l'aide de JavaScript array.find() méthode. Notez que c'est la norme JS, et n'a rien à voir avec jQuery. En fait, l'ensemble de votre code en question ne fait aucun usage de jQuery à tous.

Vous pouvez trouver la documentation sur l' array.find() ici: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Si vous faites défiler vers le bas de cette page, vous allez noter qu'il a prise en charge du navigateur info, et vous verrez qu'il déclare que IE ne prend pas en charge cette méthode.

Ironiquement, la meilleure façon de contourner ce problème serait d'utiliser jQuery, qui possède des fonctionnalités similaires qui est pris en charge dans tous les navigateurs.

33voto

Carl Markham Points 5836

Array.prototype.find n'est pris en charge par aucune version d'IE

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

-7voto

suyesh Points 389

Pour les méthodes de recherche, la prise en charge du navigateur commence à partir de IE Edge.

S'il vous plaît vérifier le lien ci-dessous.

Cliquez ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X