在CoffeeScript中从数组中删除一个值

我有一个数组:

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

我怎么能检查“世界”是否在arrays? 然后删除它,如果存在? 并参考“世界”?

有时,也许我想匹配一个正则expression式的单词,在这种情况下,我不会知道确切的string,所以我需要一个引用匹配的string。 但在这种情况下,我确定它是“世界”,这使得它更简单。

感谢您的build议。 我发现一个很酷的方式来做到这一点:

http://documentcloud.github.com/underscore

array.indexOf("World")会得到array.indexOf("World")的索引,如果不存在则返回-1array.splice(indexOfWorld, 1)将从数组中移除"World"

filter()也是一个选项:

 arr = [..., "Hello", "World", "Again", ...] newArr = arr.filter (word) -> word isnt "World" 

因为这是一个很自然的需求,我经常用一个remove(args...)方法为我的数组创build原型。

我的build议是写这个地方:

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

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

 "World" in array 

删除如果存在

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

要么

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

保持参考(这是我发现的最短 – !.push总是false,因为.push> 0)

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

尝试这个 :

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

几个答案的组合:

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

如果你想得到一个新的数组,下面这个库中的_.without()函数是一个不错的select:

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

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