Ответ 1
array.indexOf("World")
получит индекс "World"
или -1
, если он не существует. array.splice(indexOfWorld, 1)
удалит "World"
из массива.
У меня есть массив:
array = [..., "Hello", "World", "Again", ...]
Как я могу проверить, находится ли "Мир" в массиве? Затем удалите его, если он существует? И есть ссылка на "Мир" ?
Иногда, возможно, я хочу совместить слово с регулярным выражением, и в этом случае я не буду знать точную строку, поэтому мне нужно иметь ссылку на сопоставленную строку. Но в этом случае я точно знаю, что это "Мир" , который делает его проще.
Спасибо за предложения. Я нашел классный способ сделать это:
http://documentcloud.github.com/underscore
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" 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
Попробуйте следующее:
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"]
Комбинация нескольких ответов:
Array::remove = (obj) ->
@filter (el) -> el isnt obj
_.without()
функция из underscorejs библиотека является хорошей и чистой опцией, если вы хотите получить новый массив:
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1)
[2, 3, 4]
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')