Javascript 从CoffeeScript中的数组中删除值

Javascript 从CoffeeScript中的数组中删除值,javascript,node.js,coffeescript,Javascript,Node.js,Coffeescript,我有一个数组: array=[…,“你好”,“世界”,“再次”,…] 如何检查数组中是否有“World”? 然后删除它(如果存在)? 并提到“世界” 有时,我可能想将一个单词与regexp匹配,在这种情况下,我不知道确切的字符串,所以我需要有一个匹配字符串的引用。但在这种情况下,我肯定是“世界”让事情变得更简单 谢谢你的建议。我找到了一个很酷的方法: 将获得“世界”或-1的索引(如果不存在)。将从阵列中删除“World”。过滤器()也是一个选项: arr = [..., "Hello", "W

我有一个数组:

array=[…,“你好”,“世界”,“再次”,…]
如何检查数组中是否有“World”? 然后删除它(如果存在)? 并提到“世界”

有时,我可能想将一个单词与regexp匹配,在这种情况下,我不知道确切的字符串,所以我需要有一个匹配字符串的引用。但在这种情况下,我肯定是“世界”让事情变得更简单

谢谢你的建议。我找到了一个很酷的方法:

将获得
“世界”
-1
的索引(如果不存在)。将从阵列中删除
“World”

过滤器()
也是一个选项:

arr = [..., "Hello", "World", "Again", ...]

newArr = arr.filter (word) -> word isnt "World"
试试这个:

filter = ["a", "b", "c", "d", "e", "f", "g"]

#Remove "b" and "d" from the array in one go
filter.splice(index, 1) for index, value of filter when value in ["b", "d"]

因为这是一种自然的需要,我经常使用
remove(args…
方法来原型化我的数组

我的建议是写在某个地方:

Array.prototype.remove = (args...) ->
  output = []
  for arg in args
    index = @indexOf arg
    output.push @splice(index, 1) if index isnt -1
  output = output[0] if args.length is 1
  output
在任何地方都可以这样使用:

array = [..., "Hello", "World", "Again", ...]
ref = array.remove("World")
alert array # [..., "Hello", "Again",  ...]
alert ref   # "World"
这样,您还可以同时删除多个项目:

array = [..., "Hello", "World", "Again", ...]
ref = array.remove("Hello", "Again")
alert array # [..., "World",  ...]
alert ref   # ["Hello", "Again"]
CoffeeScript+jQuery: 删除一个,而不是全部

arrayRemoveItemByValue = (arr,value) ->
  r=$.inArray(value, arr)
  unless r==-1
    arr.splice(r,1)
  # return
  arr

console.log arrayRemoveItemByValue(['2','1','3'],'3')
检查“世界”是否在数组中:

"World" in array
删除(如果存在)

array = (x for x in array when x != 'World')

保留引用(这是我发现的最短时间-!。自那时起,推送总是错误的。推送>0)


几个答案的组合:

Array::remove = (obj) ->
  @filter (el) -> el isnt obj
\uuu0.without()
函数是一个很好的选择,如果您想获得一个新数组:

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]

下面的解决方案提供了更好的coffeescript语法。但是,如果您只有一个元素要从数组中删除,则此工作流的性能会更好,因为它不会遍历整个数组以查找更多具有相同值的元素。@ErikJ:“更好”CoffeeScript语法?@ryanh:您是对的,更好不是正确的词,但是其他人提供了利用CoffeeScript特定功能的替代方案。当从数组中删除最后一个项目时,这并不像预期的那样有效。请参见
splice
返回一个数组,因此它可能应该是
@splice(index,1)[0]
如果它已经被定义,我会使用
?=
来避免覆盖它。重要的区别是:此解决方案不是破坏性的,即
arr
将保持不变(这通常是良好的功能实践)。与公认的答案相比,这是具有破坏性的。在问题中,他要求提及“世界”,注意(足够尴尬)这是空间敏感的
arr.filter(word)->word不是“word”
生成一个JavaScript错误。@ashes999它实际上并没有那么笨拙。你写的东西在语法上是错误的
arr.filter(word)->word不是“word”
表示“使用
(word)->word不是“word”函数参数执行筛选函数”
Array::remove = (obj) ->
  @filter (el) -> el isnt obj
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]