前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何优雅的从Array中删除一个元素

如何优雅的从Array中删除一个元素

原创
作者头像
Jean
发布2018-12-21 14:47:02
9.6K0
发布2018-12-21 14:47:02
举报
文章被收录于专栏:Web行业观察Web行业观察

最近没有什么新文章可写了, 把以前的笔记拿来整理下, 做成文章以保持活跃度...

从JavaScript数组中删除元素是开发人员经常遇到的常见编程范例。与许多JavaScript一样,这并不像它应该的那么简单。

实际上有几种方法可以从一个数组中删除一个或多个元素 - 在这个过程中不会撕掉你的头发 - 所以让我们一个接一个地浏览它们。

使用splice删除一个元素()

这个方法是在卸下,更换,和/或添加数组中的元素的通用方式。它与其他语言中的splice()函数类似。基本上,你采取一个数组并有选择地删除它的一部分(又名“拼接”)。splice()函数的输入是要开始的索引点和要删除的元素数。

另外,请记住,数组在JavaScript中是零索引的。

要从数组中的特定索引中删除一个元素:

["bar", "baz", "foo", "qux"] list.splice(2, 1)// Starting at index position 2, remove one element["bar", "baz", "qux"] list.splice(2,2)// Starting at index position 2, remove two elements["bar", "baz"]

拼接()调用将返回任何删除元素,让你知道什么是真正被删除。

使用splice()删除一系列元素

为了确保您在前面的示例中没有错过它,特别值得一提的是您可以使用splice()删除多个连续元素。

要从数组中删除多个连续元素:

["bar", "baz", "foo", "qux"] list.splice(0, 2)// Starting at index position 0, remove two elements  ["foo", "qux"]

使用pop()删除一个元素

数组方法push()pop()在数组的末尾起作用。术语push()pop()来自微处理器早期的内存堆栈。这实现了后进先出数据结构(LIFO)的想法。所述推送()方法将一个元素添加到阵列和弹出()方法将删除之一。

要删除数组的最后一个元素:

["bar", "baz", "foo", "qux"] list.pop()["bar", "baz", "foo"]

使用shift()删除一个元素

数组方法shift()unshift()在数组的开头而不是数组的结尾处工作,就像push()pop()一样。该移位()命令将删除阵列和的第一个元素的unshift()命令将一个元素添加到数组的开始。

要删除数组的第一个元素:

["bar", "baz", "foo", "qux"] list.shift()["baz", "foo", "qux"]

按值搜索和删除特定元素

indexOf()命令返回在该给定元素可以在阵列中可以发现,或-1,如果它不存在的第一个索引。这可以与splice()一起使用来搜索元素然后将其删除,即使您不知道它在数组中的位置。

让我们删除“foo”元素:

["bar", "baz", "foo", "qux"] list.splice( list.indexOf('foo'), 1 );// Find the index position of "foo," then remove one element from that position

删除多个特定元素

让我们在数组中添加一个额外的“foo”元素,然后删除所有出现的“foo”:

["bar", "baz", "foo", "foo", "qux"] for( var i = list.length-1; i--;){if ( list[i] === 'foo') list.splice(i, 1);} ["bar", "baz", "qux"]

请注意,我们也可以使用filter() 方法进行此操作,但是这会创建一个新数组,因为filter()不会改变调用它的数组。

如果你需要进行大量的过滤,使用filter()方法可能会清理你的代码。

结论

归结起来,在JavaScript中从数组中删除元素非常简单。命名约定起初可能有点奇怪,但是一旦你做了几次,你就可以不经过深思熟虑(或者第二次看这篇文章)。

个人用的最爽的方法是filter:

list = list.filter(a=>a===1)

这种写法虽然很优雅但是效率不高, 因为filter不仅扫描全部元素,而且会创建新的list

目前搜索并删除一个元素最好的办法还是splice

希望以后会推出一个Array.prototype.removeOne类似的方法来满足这个日益增长的需求

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用splice删除一个元素()
    • 使用splice()删除一系列元素
    • 使用pop()删除一个元素
    • 使用shift()删除一个元素
    • 按值搜索和删除特定元素
    • 删除多个特定元素
    • 结论
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档