Удалить значение из массива в CoffeeScript - PullRequest
46 голосов
/ 21 ноября 2011

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

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

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

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

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

http://documentcloud.github.com/underscore

Ответы [ 8 ]

72 голосов
/ 21 ноября 2011

filter() также опция:

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

newArr = arr.filter (word) -> word isnt "World"
59 голосов
/ 21 ноября 2011

array.indexOf("World") получит индекс "World" или -1, если он не существует. array.splice(indexOfWorld, 1) удалит "World" из массива.

16 голосов
/ 16 декабря 2012

Поскольку это естественная потребность, я часто создаю прототипы своих массивов методом 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"]
14 голосов
/ 18 сентября 2013

Проверка, находится ли "World" в массиве:

"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
8 голосов
/ 20 июля 2012

Попробуйте это:

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"]
2 голосов
/ 23 ноября 2015
Функция

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

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]
2 голосов
/ 21 сентября 2014

Сочетание нескольких ответов:

Array::remove = (obj) ->
  @filter (el) -> el isnt obj
0 голосов
/ 13 сентября 2013

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...