Perché non .filter () funziona in Internet Explorer 8?

Questa è la linea:

songs = songs.filter(function (el) { return el.album==album; }); 

Questo è l’errore:

L’object non supporta questa proprietà o questo metodo

Funziona al 100% in Chrome. Cosa sta succedendo?

Array.filter() non è incluso in IE fino alla versione 9.

Potresti usarlo per implementarlo:

 if (!Array.prototype.filter) { Array.prototype.filter = function(fun /*, thisp */) { "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var res = []; var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in t) { var val = t[i]; // in case fun mutates this if (fun.call(thisp, val, i, t)) res.push(val); } } return res; }; } 

Da: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter

Oppure, dal momento che stai usando jQuery, puoi racchiudere il tuo array in un object jQuery prima:

 songs = $(songs).filter(function(){ return this.album==album; }); 

Usa es5-shim, quindi puoi usare filter / indexOf in IE8!

Facebook react.js che usa anche quello.

   

https://github.com/es-shims/es5-shim

L’uso della funzione attr () funziona?

 songs = songs.filter(function (index) { return $(this).attr("album") == album; });