文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中的新数组切片表示法——array[start:stop:step]

2024-11-29 19:11

关注

图片

而是可以像这样编写代码:

图片

这种写法不仅更简洁、可读性更强,而且更直观。

更棒的是,我们不必等到它正式发布——现在就可以使用它。你可以通过扩展 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。

来源:大迁世界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯