从CoffeeScript中的数组中删除值

时间:2011-11-20 23:36:34

标签: javascript node.js coffeescript

我有一个数组:

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

我怎样才能检查" World"在阵列中? 然后删除它,如果它存在? 并提及" World"?

有时我可能想用正则表达式匹配一个单词,在这种情况下,我不知道确切的字符串,所以我需要引用匹配的字符串。但在这种情况下,我肯定知道它的世界"这使它更简单。

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

http://documentcloud.github.com/underscore

8 个答案:

答案 0 :(得分:71)

filter()也是一个选项:

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

newArr = arr.filter (word) -> word isnt "World"

答案 1 :(得分:59)

array.indexOf("World")如果不存在,则会获得"World"-1的索引。 array.splice(indexOfWorld, 1)会从数组中删除"World"

答案 2 :(得分:16)

因为这是一种天生的需求,我经常使用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"]

答案 3 :(得分:14)

检查“World”是否在数组中:

"World" in array

删除是否存在

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

array = array.filter (e) -> e != 'World'

保持参考(这是我发现的最短的时间 - !.push总是假的,因为.push> 0)

refs = []
array = array.filter (e) -> e != 'World' || !refs.push e

答案 4 :(得分:8)

试试这个:

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"]

答案 5 :(得分:2)

几个答案的组合:

Array::remove = (obj) ->
  @filter (el) -> el isnt obj

答案 6 :(得分:2)

如果你想获得一个新的数组,来自underscorejs库的

_.without()函数是一个很好的干净选项:

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

答案 7 :(得分:0)

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')