Подтвердить что ты не робот

Удалить значение из массива в CoffeeScript

У меня есть массив:

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

Как я могу проверить, находится ли "Мир" в массиве? Затем удалите его, если он существует? И есть ссылка на "Мир" ?

Иногда, возможно, я хочу совместить слово с регулярным выражением, и в этом случае я не буду знать точную строку, поэтому мне нужно иметь ссылку на сопоставленную строку. Но в этом случае я точно знаю, что это "Мир" , который делает его проще.

Спасибо за предложения. Я нашел классный способ сделать это:

http://documentcloud.github.com/underscore

4b9b3361

Ответ 2

filter() также является опцией:

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

newArr = arr.filter (word) -> word isnt "World"

Ответ 3

Для этого такая естественная необходимость, я часто прототип своих массивов с помощью метода 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"]

Ответ 4

Проверка наличия "Мира" в массиве:

"World" in array

Удаление, если существует

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

или

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

Сохранение ссылки (что самое короткое, что я нашел -!.push всегда ложно, поскольку .push > 0)

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

Ответ 5

Попробуйте следующее:

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

Ответ 6

Комбинация нескольких ответов:

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

Ответ 7

_.without() функция из underscorejs библиотека является хорошей и чистой опцией, если вы хотите получить новый массив:

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

Ответ 8

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')