在CoffeeScript中从数组中删除一个值
我有一个数组:
array = [..., "Hello", "World", "Again", ...]
我怎么能检查“世界”是否在arrays? 然后删除它,如果存在? 并参考“世界”?
有时,也许我想匹配一个正则expression式的单词,在这种情况下,我不会知道确切的string,所以我需要一个引用匹配的string。 但在这种情况下,我确定它是“世界”,这使得它更简单。
感谢您的build议。 我发现一个很酷的方式来做到这一点:
http://documentcloud.github.com/underscore
array.indexOf("World")
会得到array.indexOf("World")
的索引,如果不存在则返回-1
。 array.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')