Por que o .filter () não funciona no Internet Explorer 8?

Esta é a linha:

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

Este é o erro:

Objeto não suporta esta propriedade ou método

Isso funciona 100% bem no Chrome. O que está acontecendo?

Array.filter() não está incluído no IE até a versão 9.

Você poderia usar isso para implementá-lo:

 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; }; } 

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

Ou já que você está usando o jQuery, você pode agrupar sua matriz em um object jQuery primeiro:

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

Use es5-shim, então você pode usar filter / indexOf no IE8!

Reag.js do Facebook usando isso também.

   

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

O uso da function attr () funciona?

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