资讯专栏INFORMATION COLUMN

使用js数组方法遇到的坑

darkbug / 703人阅读

摘要:结果会返回一个布尔值,直觉认为空数组会返回如规范解释,方法对数组中的每一个元素排除空元素通过指定的函数进行检测,当有某一个元素检测为的时候,方法立刻返回,也只有这种情况会返回,那么空数组就会返回

sort方法

sort方法用来对数组元素进行排序。但是浏览器实现可能有不同,已经两次踩到坑了,因此记录一下。

规范

ecma-262制定的排序规则:
使用两个参数x和y唤起排序

1、如果x、y都是undefined,返回 +0
2、如果x为undefined,返回 1
3、如果y未undefined,返回 -1
4、如果定义了排序方法

a、设v = ToNumber(comparefn(x, y))
b、如果v是NaN,返回 +0
c、返回v 

5、设xString = ToString(x)
6、设yString = ToString(y)
7、如果xString < yString,返回 -1
8、如果yString < xString,返回 1
9、返回 +0
当返回1的时候,x应排在y后面
返回0的时候,x、y位置不变
返回-1的时候,x应排在y前面

坑1:排序不一定是稳定的,即相等的两个元素不一定会保持在原来的位置。排序方法返回0的两个元素仍可能交换位置,如chrome浏览器的排序实现,在数组长度小于等于10的时候就使用插入排序法,没有什么问题,但是数组大于10的时候就会使用快速排序,在比较起始值和中值的时候,排序方法返回值大于和等于0的时候都会对调位置。

坑2:如上面排序规则第4条a,按标准需要把排序方法返回值转为Number类型,但是有些浏览器版本如Safari10并没有实现这一步,如果排序方法返回true/false布尔值而不是Number类型,元素位置就不会进行调整。

every方法

every方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。结果会返回一个布尔值,直觉认为空数组会返回false

callbackfn should be a function that accepts three arguments and
returns a value that is coercible to the Boolean value true or false.
every calls callbackfn once for each element present in the array, in
ascending order, until it finds one where callbackfn returns false. If
such an element is found, every immediately returns false. Otherwise,
if callbackfn returned true for all elements, every will return true.
callbackfn is called only for elements of the array which actually
exist; it is not called for missing elements of the array

如规范解释,every方法对数组中的每一个元素(排除空元素)通过指定的函数进行检测,当有某一个元素检测为false的时候,every方法立刻返回false,也只有这种情况会返回false,那么空数组就会返回true!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105285.html

相关文章

  • 微信JS-SDK选择图片遇到的坑

    摘要:微信选择图片遇到的坑有个需求要在微信企业号里面做开发,有个功能是选择图片,使用标签肯定是不管用了,手机上不能多选,所以使用了微信的提供的相关,这个地方真的是有坑,记录一下。 微信JS-SDK选择图片遇到的坑 有个需求要在微信企业号里面做开发,有个功能是选择图片,使用input标签肯定是不管用了,Android手机上不能多选,所以使用了微信的JS-SDK提供的相关API,这个地方真的是有...

    explorer_ddf 评论0 收藏0
  • 遍历DOM元素的children属性遇到的坑

    摘要:小结这下我们可以得出结论了个属性返回的对象不止能遍历到子元素,还能遍历到来自其原型的三个属性。既要防止那些添加修改了原型属性的对象遍历出多余的的结果,也要防止类似这种非标准属性返回一个属性的枚举性不可控的对象的坑。 问题的引出 关于DOM元素的children属性,以前我只在意它和childNodes属性的区别:即children属性只会返回子元素节点集合,而childNodes返回的...

    weknow619 评论0 收藏0
  • Webpack的坑位整理

    摘要:在寻找相对路径的文件时会以为根目录,默认为执行启动时所在的当前目录。在文件被添加到依赖图中时,将其转换称为了模块。配置中的两个目标。仅限高级用途,默认情况下自动生成生成文件的文件名。webpack webpack现在是主要的打包工具了,现在网络上也有很多资料可以学习了。这里主要整理了一些基础概念,但没有所有的写,只是把之前遇到的问题记录了一下。 本文的原文在我的博客中:github.com...

    lidashuang 评论0 收藏0
  • JavaScript对象深拷贝/浅拷贝遇到的坑和解决方法

    摘要:在以上讨论和研究结束后,同学向我推荐了一个库,测试了一下该库存在方法,实现深拷贝更为完整和精致,前文问题均没有在该方法内被发现,在这里提一波。 如果本文对您有任何帮助或者您有任何想要提出的意见或问题,请在本文下方回复,诚挚欢迎各位参与讨论,望各位不吝指教。原载自己的小博客 JavaScript对象拷贝遇到的坑和解决方法 | 手柄君的小阁,所以无耻地算原创吧 近期参与某集训,Java...

    atinosun 评论0 收藏0
  • PHP json_decode 遇到的坑

    摘要:原始数据其中是我要进行处理的字段,处理完成之后再次使用进行编码。所以正确的做法是在解码的时候不要传递第二个参数让解码结果是一个对象,然后操作对象的属性,操作完成之后再次编码就不会出现偏差。 场景:某项目客户反馈,输出的结果 JSON 中有个要求为对象的数据字段,在某些情况下返回的是 [] 而不是 {};数据由公司其他部门提供,查看原始数据的时候,没有发现任何问题;后来因为要加入某些预处...

    Ryan_Li 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<