大家好,欢迎来到IT知识分享网。
使用这种新的切片表示法,我们将不再编写如下的 slice() 代码:
而是可以像这样编写代码:
这种写法不仅更简洁、可读性更强,而且更直观。
更棒的是,我们不必等到它正式发布——现在就可以使用它。你可以通过扩展 Array 类来实现这个功能:
处理未指定的结束索引
如果我们省略第二个数字(即 end 参数),数组会切片到最后一个元素吗?
它不会这样做?
这是因为 end 被赋值为空字符串,而 Number('') 的结果是 0,所以我们得到了 arr.slice(n, 0),它总是返回一个空数组。
为了解决这个问题,我们可以对 r() 方法进行升级,使其能够正确处理这种情况:
处理负索引
这个新方法能处理负索引吗?
当然可以!
负的 start 或 end 值会直接传递给 slice(),因为它已经内置了对负索引的支持。
起始-结束-步长
我们再次升级,支持 array[start:stop:step],也就是支持以固定的间隔跳过数组中的元素。
正如我们在 Python 中所见的那样:
然而,slice() 本身并不支持步长,所以我们需要使用一个 for 循环来快速遍历数组:
Array.reduce() 以不可变的方式完成了完全相同的任务。我认为,在数据转换的过程中,函数式编程的流动性使得它显得格外优雅。
可读性受到影响了…
如果我们想要反向遍历数组呢?
当然 Python 有它:
在这种情况下,start 应该大于 stop,因为你是从右向左计数,所以 start 应该更大一些。
我们需要再次调整 slice() 的使用方式,当 step 为负数时交换 absStart 和 absEnd:
slice() 在 end > start 时会返回一个空数组,这样我们就能够使用它进行一些基础操作。
现在,让我们将所有功能组合在一起:
回顾一下我们是如何开始的:
这不仅简化了代码,而且成功将 Python 中的酷炫数组切片语法带入了 JavaScript。
当然,代码中我们还没有添加对错误类型和边界情况的检查,花了不少时间调试这些问题。如果我们进一步添加多维数组支持,比如 numpy,代码会变得更加复杂,但这也是值得尝试的。
通过这个新的 Array r() 方法,我们成功地将 Python 的数组切片语法引入了 JavaScript。
最后:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/134021.html
![JavaScript中的新数组切片表示法——array[start:stop:step]插图1 5293aa788b641f8aac49da1c88a81a93.png](https://img-blog.csdnimg.cn/img_convert/5293aa788b641f8aac49da1c88a81a93.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图3 7db74e60d2508d606aa86210bfa6d275.png](https://img-blog.csdnimg.cn/img_convert/7db74e60d2508d606aa86210bfa6d275.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图5 975efabc057029ded1cd08c7d963187f.png](https://img-blog.csdnimg.cn/img_convert/975efabc057029ded1cd08c7d963187f.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图7 0c765ec789c6085d0de3ebd4761dad85.png](https://img-blog.csdnimg.cn/img_convert/0c765ec789c6085d0de3ebd4761dad85.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图9 c5dc5ab54ca21ca10c63580b4568c113.png](https://img-blog.csdnimg.cn/img_convert/c5dc5ab54ca21ca10c63580b4568c113.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图11 fc1da4d35295e5ba07c4ed2275d72953.png](https://img-blog.csdnimg.cn/img_convert/fc1da4d35295e5ba07c4ed2275d72953.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图13 9313b24925c13e49378616d075e5fe2c.png](https://img-blog.csdnimg.cn/img_convert/9313b24925c13e49378616d075e5fe2c.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图15 f72aeed2ae7723f368cf1da3478efa19.png](https://img-blog.csdnimg.cn/img_convert/f72aeed2ae7723f368cf1da3478efa19.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图17 1344df1cd7909100b93cdd9895de97f0.png](https://img-blog.csdnimg.cn/img_convert/1344df1cd7909100b93cdd9895de97f0.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图19 9691d5f2287be16307738e71bb4570ae.png](https://img-blog.csdnimg.cn/img_convert/9691d5f2287be16307738e71bb4570ae.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图21 897e0f89335e65bfb86f22f2e3a6cad5.png](https://img-blog.csdnimg.cn/img_convert/897e0f89335e65bfb86f22f2e3a6cad5.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图23 101f8e2f129dd7574643c38f9f0b08ec.png](https://img-blog.csdnimg.cn/img_convert/101f8e2f129dd7574643c38f9f0b08ec.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图25 e1d760e70fe25294e769a4a29c5d80a4.png](https://img-blog.csdnimg.cn/img_convert/e1d760e70fe25294e769a4a29c5d80a4.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图27 5fb1d5d7b7f87dad988cb89bc8747724.png](https://img-blog.csdnimg.cn/img_convert/5fb1d5d7b7f87dad988cb89bc8747724.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图29 73cefb34db2f7523bef5e6f16527d052.png](https://img-blog.csdnimg.cn/img_convert/73cefb34db2f7523bef5e6f16527d052.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图31 6296cb5480172f2b1a234b43520717c9.png](https://img-blog.csdnimg.cn/img_convert/6296cb5480172f2b1a234b43520717c9.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图33 4f9db59bfa9242b1a5a3b2edca0ad97d.png](https://img-blog.csdnimg.cn/img_convert/4f9db59bfa9242b1a5a3b2edca0ad97d.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图35 0ed6c6fd970ba02b00154f1feba05696.png](https://img-blog.csdnimg.cn/img_convert/0ed6c6fd970ba02b00154f1feba05696.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图37 eb5078836929df1f36e45a1f1cc0fd7a.png](https://img-blog.csdnimg.cn/img_convert/eb5078836929df1f36e45a1f1cc0fd7a.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图39 bbb87b871f8ebffde362cb04bc021955.png](https://img-blog.csdnimg.cn/img_convert/bbb87b871f8ebffde362cb04bc021955.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图41 c8270974e249f555fe25346e461c261e.png](https://img-blog.csdnimg.cn/img_convert/c8270974e249f555fe25346e461c261e.png)
![JavaScript中的新数组切片表示法——array[start:stop:step]插图43 a590a741f5efdbc84ebf8ce1eea0d449.png](https://img-blog.csdnimg.cn/img_convert/a590a741f5efdbc84ebf8ce1eea0d449.png)