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]