web-dev-qa-db-fra.com

Supprimer une valeur d'un tableau dans CoffeeScript

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:

http://documentcloud.github.com/underscore

46
ajsie

array.indexOf("World") obtiendra l'index de "World" ou -1 s'il n'existe pas. array.splice(indexOfWorld, 1) supprimera "World" du tableau.

59
Ry-

filter() est également une option:

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

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

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"]
16
Alvaro Lourenço

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
14
catvir

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

_.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]
2
Ivan Aranibar

Une combinaison de quelques réponses:

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

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')
0
Igor Teterin