JS 数组操作怪癖
我在上一篇文章中提到过,我一直在练习手写答案来解决问题。这比使用 IDE 或 Cargo 编程要花费的时间长得多,但也揭示了我对 JS 方法的很多误解:
slice()
1和splice()
.slice()
将数组项提取[0, n-1]
为新数组。.splice()
通过从位置删除项[0, n]
并将其返回到初始数组的位置来改变原始数组。它还提供了第三个参数来添加项。
2 不能简单地遍历字符串
应用.split('')
空字符串或[...]
(扩展运算符)返回离散字母数组
charAt()
例外:在 for 循环中使用
3 扩展运算符产生浅拷贝
如果要复制的数组深度超过一层,则不应[...spread]
。在浅复制中,嵌套数组(或对象)保留对原始副本的引用。对它们的任何更改都会影响初始副本和后续副本。
劳里·巴斯 (Laurie Barth)更详细地介绍了浅层复制和深层复制。
4for (i of ...)
对for (i in ...)
前者支持对数组、字符串、DOM 节点集合、映射、集合和生成器进行迭代。后者则迭代对象属性,例如键。for ...of 与 for...in
5.join()
对.push()
对比.concat()
.push() 改变数组并将项添加到长度的末尾
.concat() 合并数组,并且运行速度比 .join() 更快
6 我最喜欢的一些方法存在问题:它们会改变数组
IE shift()
,unshift()
,splice()
,pop()
,push()
现在,寻找不改变状态的替代方案已经成为我的爱好,例如reduce()
filter()
,map()
和some()
concat()
7find()
对filter()
find()
返回集合中匹配的第一个值并停止,除非我将其放入 for 循环中。filter()
返回匹配值的数组。
8 forEach 是一个 void 函数
我读 MDN 文档的时候不太明白,而且博客上似乎有两处说法,说它会改变原始数组。它什么也没返回,在 DEV 社区 ❤️ 的帮助下,我终于发现了这一点!
相关阅读
你还发现了其他想添加到这个列表的人吗?告诉我!
鏂囩珷鏉ユ簮锛�https://dev.to/jenc/js-array-manipulation-quirks-3860
说得好!不过,你可以直接用 for 循环遍历字符串,访问每个索引处的字符!