js array不支持map filter等的解决办法

if (!Array.prototype.every)

{

Array.prototype.every = function(fun /*, thisp*/)

{

var len = this.length;

if (typeof fun != "function")

throw new TypeError();

var thisp = arguments[1];

for (var i = 0; i < len; i++)

{

if (i in this &&

!fun.call(thisp, this[i], i, this))

return false;

}

return true;

};

}

if (!Array.prototype.filter)

{

Array.prototype.filter = function(fun /*, thisp*/)

{

var len = this.length;

if (typeof fun != "function")

throw new TypeError();

var res = new Array();

var thisp = arguments[1];

for (var i = 0; i < len; i++)

{

if (i in this)

{

var val = this[i]; // in case fun mutates this

if (fun.call(thisp, val, i, this))

res.push(val);

}

}

return res;

};

}

if (!Array.prototype.forEach)

{

Array.prototype.forEach = function(fun /*, thisp*/)

{

var len = this.length;

if (typeof fun != "function")

throw new TypeError();

var thisp = arguments[1];

for (var i = 0; i < len; i++)

{

if (i in this)

fun.call(thisp, this[i], i, this);

}

};

}

if (!Array.prototype.map)

{

Array.prototype.map = function(fun /*, thisp*/)

{

var len = this.length;

if (typeof fun != "function")

throw new TypeError();

var res = new Array(len);

var thisp = arguments[1];

for (var i = 0; i < len; i++)

{

if (i in this)

res[i] = fun.call(thisp, this[i], i, this);

}

return res;

};

}

if (!Array.prototype.some)

{

Array.prototype.some = function(fun /*, thisp*/)

{

var len = this.length;

if (typeof fun != "function")

throw new TypeError();

var thisp = arguments[1];

for (var i = 0; i < len; i++)

{

if (i in this &&

fun.call(thisp, this[i], i, this))

return true;

}

return false;

};

}

Array.prototype.sortNum = function() {

return this.sort( function (a,b) { return a-b; } );

}

<!--

var tmp = [5,9,12,18,56,1,10,42,‘blue‘,30, 7,97,53,33,30,35,27,30,‘35‘,‘Ball‘, ‘bubble‘];

var thirty=tmp.find(30);             // Returns 9, 14, 17

var thirtyfive=tmp.find(‘35‘);       // Returns 18

var thirtyfive=tmp.find(35);         // Returns 15

var haveBlue=tmp.find(‘blue‘);       // Returns 8

var notFound=tmp.find(‘not there!‘); // Returns false

var regexp1=tmp.find(/^b/);          // returns 8,20    (first letter starts with b)

var regexp1=tmp.find(/^b/i);         // returns 8,19,20 (same as above but ignore case)

-->

Array.prototype.find = function(searchStr) {

var returnArray = false;

for (i=0; i<this.length; i++) {

if (typeof(searchStr) == ‘function‘) {

if (searchStr.test(this[i])) {

if (!returnArray) { returnArray = [] }

returnArray.push(i);

}

} else {

if (this[i]===searchStr) {

if (!returnArray) { returnArray = [] }

returnArray.push(i);

}

}

}

return returnArray;

}

//随机改变数组的排序

Array.prototype.shuffle = function (){

for(var rnd, tmp, i=this.length; i; rnd=parseInt(Math.random()*i), tmp=this[--i], this[i]=this[rnd], this[rnd]=tmp);

return this;

}

<!--var myArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];

var yourArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];

document.writeln(myArray.compare(yourArray)); // outputs: true;-->

Array.prototype.compare = function(testArr) {

if (this.length != testArr.length) return false;

for (var i = 0; i < testArr.length; i++) {

if (this[i].compare) {

if (!this[i].compare(testArr[i])) return false;

}

if (this[i] !== testArr[i]) return false;

}

return true;

}

//去掉数组中重复的值var a = new Array("5","7","7"); a.unique();

Array.prototype.unique = function() {

var data = this || [];

var a = {}; //声明一个对象,javascript的对象可以当哈希表用

for (var i = 0; i < data.length; i++) {

a[data[i]] = true;  //设置标记,把数组的值当下标,这样就可以去掉重复的值

}

data.length = 0;

for (var i in a) { //遍历对象,把已标记的还原成数组

this[data.length] = i;

}

return data;

}

Array.prototype.addAll = function($array)

{

if($array == null || $array.length == 0)

return;

for(var $i=0; $i<$array.length; $i++)

this.push($array[$i]);

}

Array.prototype.contains = function($value)

{

for(var $i=0; $i<this.length; $i++)

{

var $element = this[$i];

if($element == $value)

return true;

}

return false;

}

Array.prototype.indexOf = function($value)

{

for(var $i=0; $i<this.length; $i++)

{

if(this[$i] == $value)

return $i;

}

return -1;

}

if (!Array.prototype.lastIndexOf)

{

Array.prototype.lastIndexOf = function(elt /*, from*/)

{

var len = this.length;

var from = Number(arguments[1]);

if (isNaN(from))

{

from = len - 1;

}

else

{

from = (from < 0)

? Math.ceil(from)

: Math.floor(from);

if (from < 0)

from += len;

else if (from >= len)

from = len - 1;

}

for (; from > -1; from--)

{

if (from in this &&

this[from] === elt)

return from;

}

return -1;

};

}

Array.prototype.insertAt = function($value, $index)

{

if($index < 0)

this.unshift($value);

else if($index >= this.length)

this.push($value);

else

this.splice($index, 0, $value);

}

/**

* 根据数组的下标来删除元素

*/

Array.prototype.removeByIndex=function($n) { 

if($n<0){ //如果n<0,则不进行任何操作。

  return this;

}else{

return this.slice(0,$n).concat(this.slice($n+1,this.length));

}

}

//依赖indexOf

Array.prototype.remove = function($value)

{

var $index = this.indexOf($value);

if($index != -1)

this.splice($index, 1);

}

Array.prototype.removeAll = function()

{

while(this.length > 0)

this.pop();

}

Array.prototype.replace = function($oldValue, $newValue)

{

for(var $i=0; $i<this.length; $i++)

{

if(this[$i] == $oldValue)

{

this[$i] = $newValue;

return;

}

}

}

Array.prototype.swap = function($a, $b)

{

if($a == $b)

return;

var $tmp = this[$a];

this[$a] = this[$b];

this[$b] = $tmp;

}

Array.prototype.max = function() {

return Math.max.apply({}, this);

}

Array.prototype.min = function() {

return Math.min.apply({}, this);

}

Array.prototype.splice = function(start, delLen, item){

var len =this.length;

start = start<0?0:start>len?len:start?start:0;

delLen=delLen<0?0:delLen>len?len:delLen?delLen:len;

var arr =[],res=[];

var iarr=0,ires=0,i=0;

for(i=0;i<len;i++){

if(i<start|| ires>=delLen) arr[iarr++]=this[i];

else {

res[ires++]=this[i];

if(item&&ires==delLen){

arr[iarr++]=item;

}

}

}

if(item&&ires<delLen) arr[iarr]=item;

for(var i=0;i<arr.length;i++){

this[i]=arr[i];

}

this.length=arr.length;

return res;

}

Array.prototype.shift = function(){ if(!this) return[];return this.splice(0,1)[0];}

//分开添加,关键字shallow copy,如果遇到数组,复制数组中的元素

Array.prototype.concat = function(){

var i=0;

while(i<arguments.length){

if(typeof arguments[i] === ‘object‘&&typeof arguments[i].splice ===‘function‘ &&!arguments[i].propertyIsEnumerable(‘length‘)){

// NOT SHALLOW COPY BELOW

// Array.prototype.concat.apply(this,arguments[i++]);

var j=0;

while(j<arguments[i].length) this.splice(this.length,0,arguments[i][j++]);

i++;

} else{

this[this.length]=arguments[i++];

}

}

return this;

}

Array.prototype.join = function(separator){

var i=0,str="";

while(i<this.length) str+=this[i++]+separator;

return str;

}

Array.prototype.pop = function() { return this.splice(this.length-1,1)[0];}

Array.prototype.push = function(){

Array.prototype.splice.apply(this,

[this.length,0].concat(Array.prototype.slice.apply(arguments))); //这里没有直接处理参数,而是复制了一下

return this.length;

}

Array.prototype.reverse = function(){

for(var i=0;i<this.length/2;i++){

var temp = this[i];

this[i]= this[this.length-1-i];

this[this.length-1-i] = temp;

}

return this;

}

Array.prototype.slice = function(start, end){

var len =this.length;

start=start<0?start+=len:start?start:0;

end =end<0?end+=len:end>len?len:end?end:len;

var i=start;

var res = [];

while(i<end){

res.push(this[i++]);

}

return res;

}

//arr.unshift(ele1,ele2,ele3....)

Array.prototype.unshift =function(){

Array.prototype.splice.apply(this,[0,0].concat(Array.prototype.slice.apply(this,arguments)));

}

时间: 2024-10-18 08:38:53

js array不支持map filter等的解决办法的相关文章

IE8以下不支持css3 media query的解决办法

针对IE8以下不支持css3的media query,可以使用response.js解决 下载地址:https://github.com/scottjehl/Respond/ 这里有一篇关于其实现原理的文章:http://caibaojian.com/respondjs.html 引用时的注意点: 不可将媒介查询代码写在html内部,因为response是通过ajax分析link引入的css文件,故html里面的样式将被忽略. 引入文件需在css引入之后 <!--[if lte IE 8]>

Windows下Apache配置SSL以支持https及出错的解决办法

步骤一:安装apache,使其支持SSL,并安装php 1.安装配有SSL模块的apache,apache_2.2.8-win32-x86-openssl-0.9.8g 2.配置apache以支持SSL: 1)打开apache的配置文件conf/httpd.conf LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf 去掉两行前面的# 2)注意修改httpd-ssl.conf 文件里的两个字段: S

js代码从页面移植到文件中失效或js代码修改后不起作用的解决办法

最近在做关于网站的项目,总是发生这样的问题 写的javascript代码在页面上没有问题,但是将js代码移植到.js的文件中,在页面上进行调用,总是出现失效等错误 另外修改后的js代码,重新刷新网页仍然不起作用 经过大量搜索并经过验证,可以用下面方法来解决 将js代码封装到js文件中失效的原因可能是js文件中存在中文注释,导致在执行的时候中断,在js文件尽量不要写中文注释 修改后的js代码刷新网页后不起效果可能是因为你所用的浏览器使用缓存的问题,可在浏览器中设置取消使用缓存,并删除临时文件,重启

运行js提示库没有注册错误8002801d的解决办法

运行js提示库没有注册错误8002801d的解决办法这个错误主要是因为服务器上的windows scripts版本较低,请按下面的链接下载较高版本windows scripts 5.6并在服务器上进行安装,重启后即可正常.在微软官网搜索windows scripts,选择scr56chs.exe下载后安装.http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=376d98b6-67cf-4473-9b7d-f635292a2

js 利用iframe和location.hash跨域解决办法,java图片上传回调JS函数跨域

奶奶的:折腾了我二天,终于解决了!网上有很多例子. 但跟我的都不太一样,费话不多说了,上图   上代码: IE ,firefix,chrome 测试通过 js :这个主页面,部分代码, function submitUpload(id){ $("#imgSrc" + id +"").attr("alt", "图片上传中--"); var imgID = id; if(id>0){ imgID = 1; } var for

JS 调试中常见的报错的解决办法

报错:Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at Function.m.parseJSON (jquery.js:8515) at Object.success (crud.html:45) at j (jquery.js:3143) at Object.fireWith [as resolveWith] (jquery.js:3255) at x (

js当中mouseover和mouseout多次触发解决办法

问题描述 我希望当鼠标移动到id1上的时候,id2显示,当鼠标离开id1的时候,id2显示.问题如下: 1.当鼠标从id1上移动到id2上的时候,id由有显示变为不显示,然后变为显示 2.当鼠标从id2上移动到id1上的时候, id2有显示变为不显示,然后变为显示 我希望的是当鼠标在id1或者id2上移动的时候,id2一直显示,不发生变化. <script type="text/javascript" src="https://code.jquery.com/jquer

Chrome浏览器42版本以上不支持silverlight 5.0的解决办法

场景: 浏览器:chrome V43 插件:silverlight 5.0 操作系统:xp 问题: 自己开发silverlight网站在IE7和firefox中能正常打开,但在chrome中打开失败. 原因: chrome 从42版本开始不支持NPAPI,(Chrome 42禁用NPAPI和相关插件:Java.Unity和Silverlight) 解决办法: 1.在Chrome浏览器地址栏中输入:chrome://flags/ 2.在打开的浏览器配置页面中找到"启用 NPAPI Mac, Win

js出现红叉怎么办 解决办法 在eclisp中引入js(JavaScript )文件出现红叉解决办法

js文件引入eclipse工程出现红叉 原因: 这是Eclipse或者MyEclipse校验失败的错误,不影响程序正常执行. 解决办法: 1.可以不管,如果不影响使用,eclipse对js校验不太准: 2.运行程序,没有问题,别管了,有问题就换一个: 3.clean project: 5.如果是myeclipse,选中js文件,右键Myeclipse--ManaValidation--ExcludeResource--(选中全部或者那个js)--OK: 操作后还出现红叉,那就clean一下工程,