私は配列を持っています:
array = [..., "Hello", "World", "Again", ...]
「World」が配列内にあるかどうかを確認するにはどうすればよいですか?次に、存在する場合は削除しますか? 「世界」への参照がありますか?
Wordを正規表現と一致させたい場合があります。その場合、正確な文字列がわからないため、一致した文字列への参照が必要です。しかし、この場合、私はそれがそれをより簡単にする「世界」であることを確かに知っています。
提案をありがとう。クールな方法を見つけました:
array.indexOf("World")
は、_"World"
_または_-1
_のインデックスを取得します(存在しない場合)。 array.splice(indexOfWorld, 1)
は、配列から_"World"
_を削除します。
filter()
もオプションです:
arr = [..., "Hello", "World", "Again", ...]
newArr = arr.filter (Word) -> Word isnt "World"
これは非常に自然なニーズであるため、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"]
「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
これを試して :
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"]
nderscorejs ライブラリの_.without()
関数は、新しい配列を取得する場合に適したクリーンなオプションです。
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]
いくつかの答えの組み合わせ:
Array::remove = (obj) ->
@filter (el) -> el isnt obj
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')