web-dev-qa-db-ja.com

CoffeeScriptの配列から値を削除する

私は配列を持っています:

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

「World」が配列内にあるかどうかを確認するにはどうすればよいですか?次に、存在する場合は削除しますか? 「世界」への参照がありますか?

Wordを正規表現と一致させたい場合があります。その場合、正確な文字列がわからないため、一致した文字列への参照が必要です。しかし、この場合、私はそれがそれをより簡単にする「世界」であることを確かに知っています。

提案をありがとう。クールな方法を見つけました:

http://documentcloud.github.com/underscore

46
ajsie

array.indexOf("World") は、_"World"_または_-1_のインデックスを取得します(存在しない場合)。 array.splice(indexOfWorld, 1) は、配列から_"World"_を削除します。

59
Ry-

filter()もオプションです:

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

newArr = arr.filter (Word) -> Word isnt "World"
72
Ricardo Tomasi

これは非常に自然なニーズであるため、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"]
16

「World」が配列にあるかどうかを確認します。

"World" in array

存在する場合は削除

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

または

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

参照を維持する(これは私が見つけた最短です-!.Pushは.Push> 0なので常にfalseです)

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

これを試して :

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

nderscorejs ライブラリの_.without()関数は、新しい配列を取得する場合に適したクリーンなオプションです。

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

いくつかの答えの組み合わせ:

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

CoffeeScript + jQuery:すべてではなく1つを削除する

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

console.log arrayRemoveItemByValue(['2','1','3'],'3')
0
Igor Teterin