javascript框架设计的阅读笔记数组的扩展与修复

javascript框架设计的阅读笔记数组的扩展与修复
1.indexof和字符串的方法

因为IE7使用IndexOf数组对象犯了一个错误,你需要重写一个兼容性

复制代码代码如下所示:

Array.prototype.lastIndexOf(项目、指标){

var n = this.length,I =(指数= = null | |指数> n-1)N-1:指数;

如果(i < 0)i = n + i;

为(;;=;0;;

如果(这{我} =项目) / /指标,一致的判断,字符串

还我;

返回- 1;

}
方法:将2.shuffle阵列。

复制代码代码如下所示:

函数洗牌(目标){

var i = target.length,J,温度

(为;我> 0;J = parseInt(数学。随机)(我),X =目标{我},{我} = {目标目标目标J },{ } { } J = x)

/ /假设长度= 10,然后Math.random(* 10 - > { 0)),parseInt,{ 0,9 },随机选择和数组的最后交流。第二周期,{ 0.8 },和数组的倒数第二。

将目标;

}
3的平面处理。数组:变平,返回一维数组

复制代码代码如下所示:

功能平(ARR){

var结果{ };

arr.foreach(功能(项目){)

如果(Array.isArray(项目)result.concat(平)(项目));

其他result.push(项目);

});

返回结果;

}
方法:手术4.unique阵列

这种方法,面试官喜欢问,因为它有多种实现方法,最常见的是环两。知道最常见的是使用一个对象,然后循环数组arr,每个如果(a { } } {我ARR)存在,不存在,然后把你的新定义数组的结果。的存在证明,重复,所以你不用努力的结果。这个方案,123

所以有以下方法:{ 1,1

复制代码代码如下所示:

如果((typeof obj {数组{我} })!=(typeof数组{我})| | obj {数组{我} }!=数组{ }){

A.push(数组{我});

obj { {我} } =数组数组{我};

}
首先确定类型是相同的,如果相同的,由它们的值判断相等,不等于存款,等于已经存在的值之前。

如果类型不同,这里有两种情况

在第一种情况下,目标已经存储的数据,例如,obj { 123 } = 123,现在阵列{我} = 123

第二种情况是,对象没有保存的数据,例如,数组{我} = 123,obj { 123 } = undefind,当类obj { } } {我是数组类型定义为不确定的,不等于类型数组{我},这是存放在一个数组。

这种方法可以解决字符串和数字相同的情况,但不能解决对象的相同情况;

在第一个周期,obj {一} =未定义的类型,类型为对象。对象{一} = {物}的实际上是obj =一;

第二周期类obj {黑}等于类型对象obj { },事实上,类为对象,类B为对象,所以它是对象数组{我} } {!= b,即!乙,所以存入

obj {黑} = B;即,对象obj { } = B;覆盖以前的obj { } =一个对象;

在这种情况下,所有对象都将出现,只有最后一个对象值将被保存。

当我考虑对象时,我使用以下方法:

复制代码代码如下所示:

对于(var i = 0;i < temp.length;i++){

对于(var j = i + 1;J < temp.length;j++){

如果(临时{ } =温度{ }){

temp.splice(J,1);

J;

}

}

}

回复;
5。数组排序:排序方法。如果你要排序的对象,你可以写一个比较(A,B){ if(a.年龄> b.age)返回1;否则返回1;},A.sort(a.sort)。

6.min返回数组的最小值:返回math.min.apply(0,阵列);

7.unshift不返回数组的长度在ie6,7。

复制代码代码如下所示:

如果({ }。不换位(1)= = 1!) / /从前面加一项空数组,其他浏览器将返回1,但ie6,7不返回数组的长度,如果此时执行语句

{

无功_unshift = array.prototype.unshift; / /函数劫持。

array.prototype.unshift =函数(){

_unshift.apply(这个参数);

返回this.length;

}

}
在一个参数的情况下8.splice,IE8默认的二参数及以下版本是0,而其他的浏览器是数组的长度。

复制代码代码如下所示:

如果({1,2,3}。接头(1)。长度= = 0) / / IE8及以下版本将等于0,其他版本将等于3,进入如果

{

无功_splice = array.prototype.splice;

array.prototype.splice =函数(){

如果(arguments.length = = 1) / /如果只有一个参数

{

返回_splice.call(这一个,这个长度);

其他{ }

返回_splice.apply(这个参数);

}

}

}
该方法将改变数组的选项,所以阵列推、流行、移位、不位移(这些方法也会修改阵列选项)会调用这个方法来实现。

有一个地方值得注意:

复制代码代码如下所示:

VaR颜色=新的数组(红的,蓝的,',);

2 = color.splice VaR(2,0,'brown,粉红的);

警报(彩色); / /红色,蓝色,棕色,粉红色,黄色,黑色,开始在黄色选项,操作删除,如果为0,然后添加选项之前插入yellow.remember。
在这里,您将看到拼接和切片之间的差异、返回值以及对原始数组的影响

以上是本节内容的简化版本,虽然它是精简的,但重点是它。我希望这将有助于您阅读本节。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部