支援IE8及以下的,原生JS陣列迭代的五種方法
阿新 • • 發佈:2019-02-15
IE真是讓前端開發者頭疼的問題,在解決陣列的迭代的過程中,IE8及以下並不能很好的支援。於是去網上搜了搜陣列迭代中的every方法,在一個部落格大V中搬過來後,發現仍會報錯,又比對了下網上的程式碼,發現我複製的並沒有錯(QAQ 也不試試就直接用放到部落格,這種態度蠻無語的)。於是又看著拿過來的程式碼,進行了修改和擴充套件。
① 陣列中的every方法
②陣列的filter方法if (!Array.prototype.every) { Array.prototype.every = function (every_fun, thisArg) { var _this = null, iKey = 0, len = this.length; //無符號右移 if (typeof every_fun !== "function") { throw new TypeError("every_fun is not a function"); } if (thisArg) { _this = thisArg; }//繫結執行環境 for (; iKey < len; iKey++) { var key_Value = this[iKey]; if(!every_fun.call(_this, key_Value, iKey, this)){ return false; }; } return true; } } var arr = [2,33,22], every_bool = arr.every(function(item,index,array){ return item >1; }); alert(every_bool); //true
③ 陣列的some 方法if (!Array.prototype.filter) { Array.prototype.filter = function (filter_fun, thisArg) { var _this = null; arr_fil = [], iKey = 0, arr_len = this.length; if (typeof filter_fun != 'function') { throw new Error('filter_fun is not a function'); } if (thisArg) { _this = thisArg; } for (; iKey < arr_len; iKey++) { var key_value = this[iKey]; filter_fun.call(_this, key_value, iKey, this) && arr_fil.push(key_value); } return arr_fil; } } var arr = [1, 23, 8] filter_arr = arr.filter(function (item, index, array) { return item > 2; }); alert(filter_arr)//[23,8]
至於其他的兩種陣列迭代的方法,大家照著寫就好了,也蠻簡單的。if (!Array.prototype.some) { Array.prototype.some = function (some_fun, thisArg) { var _this = null, iKey = 0, arr_len = this.length; if (typeof some_fun != 'function') { throw new typeError('some_fun is not a function') } if (thisArg) { _this = thisArg; } for (; iKey < arr_len; iKey++) { var key_value = this[iKey]; // some_fun.call(_this, arr_value, i, this)&&return true; if (some_fun.call(_this, key_value, iKey, this)) { return true; } } return false; } } var arr = [0, 22, 33]; some_bool = arr.some(function (item, index, array) { return item > 1; }) alert(some_bool) //ture
在這裡丟擲一個問題,為什麼邏輯與&&和邏輯或||操作符後面跟上return 會直接報錯,有知道的小夥伴麼,求大佬指導。