J'ai un tableau:
array = [..., "Hello", "World", "Again", ...]
Comment puis-je vérifier si "World" est dans le tableau? Ensuite, supprimez-le s'il existe? Et avez une référence au "Monde"?
Parfois, je veux peut-être faire correspondre un mot avec une expression rationnelle et dans ce cas, je ne connais pas la chaîne exacte, j'ai donc besoin d'avoir une référence à la chaîne correspondante. Mais dans ce cas, je sais que c'est "World" ce qui le rend plus simple.
Merci pour les suggestions. J'ai trouvé une façon sympa de le faire:
array.indexOf("World")
obtiendra l'index de "World"
ou -1
s'il n'existe pas. array.splice(indexOfWorld, 1)
supprimera "World"
du tableau.
filter()
est également une option:
arr = [..., "Hello", "World", "Again", ...]
newArr = arr.filter (Word) -> Word isnt "World"
Pour que ce soit un besoin si naturel, je crée souvent des prototypes de mes tableaux avec une méthode remove(args...)
.
Ma suggestion est d'écrire ceci quelque part:
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
Et utilisez comme ça n'importe où:
array = [..., "Hello", "World", "Again", ...]
ref = array.remove("World")
alert array # [..., "Hello", "Again", ...]
alert ref # "World"
De cette façon, vous pouvez également supprimer plusieurs éléments en même temps:
array = [..., "Hello", "World", "Again", ...]
ref = array.remove("Hello", "Again")
alert array # [..., "World", ...]
alert ref # ["Hello", "Again"]
Vérification si "World" est dans le tableau:
"World" in array
Suppression s'il existe
array = (x for x in array when x != 'World')
ou
array = array.filter (e) -> e != 'World'
Garder la référence (c'est le plus court que j'ai trouvé -! .Push est toujours faux depuis .Push> 0)
refs = []
array = array.filter (e) -> e != 'World' || !refs.Push e
Essaye ça :
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"]
_.without()
fonction de la bibliothèque nderscorejs est une bonne option propre au cas où vous voudriez obtenir un nouveau tableau:
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]
Une combinaison de quelques réponses:
Array::remove = (obj) ->
@filter (el) -> el isnt obj
CoffeeScript + jQuery: en supprimer un, pas tous
arrayRemoveItemByValue = (arr,value) ->
r=$.inArray(value, arr)
unless r==-1
arr.splice(r,1)
# return
arr
console.log arrayRemoveItemByValue(['2','1','3'],'3')