Итак, у меня есть массив, который выглядит так.Как удалить нежелательные из массива?
["Enter Sandman", "One", "Nothing Else Matters", "Master of Puppets", "The Unforgiven", "The Day That Never Comes", "For Whom the Bell Tolls", "Fade to Black", "Sad But True", "Wherever I May Roam", "Turn the Page", "I Disappear", "Fuel", "Cyanide", "Seek & Destroy", "Whiskey In the Jar", "All Nightmare Long", "Battery", "Welcome Home (Sanitarium)", "The Unforgiven III", "The Unforgiven II", "King Nothing", "Ride the Lightning", "No Leaf Clover", "Until It Sleeps", "...And Justice for All", "Blackened", "The Memory Remains", "Hero of the Day", "The Four Horsemen", "Orion", "Creeping Death", "St. Anger", "Harvester of Sorrow", "Don't Tread on Me", "Broken, Beat & Scarred", "Disposable Heroes", "Fight Fire With Fire", "The End of the Line", "Trapped Under Ice", "Of Wolf and Man", "Whiplash", "My Apocalypse", "Suicide & Redemption", "The Shortest Straw", "Tuesday's Gone"]
Этот массив создается с помощью этой команды
artists = search_object.map{|x| x["trackName"]}.uniq.delete_if {|x| x == nil}
это работает хорошо, но мне нужно, чтобы отфильтровать некоторые дополнительные элементы. Пользователь вводит текстовое поле, и по мере ввода мне нужно сузить результаты. Например, если пользователь набирает строку «Вопросы», мне нужно вынуть элементы, которые не имеют этого имени или имени. Таким образом, он раскрывается до «Nothing Else Matters». Если пользователь вводит букву «a», тогда все остальные в массиве, которые не имеют «a», удаляются.
они придут с Params [: текст]
Я сделал это, и она работала, но, возможно, есть более чистый способ
query = params[:term]
artists = search_object.map{|x| x["trackName"]}.uniq.delete_if {|x| x == nil}
filtered = []
artists.each do |artist|
filtered << artist if artist.include?(query)
end
metallica_tracks << «Жить, чтобы умереть» – johnmcaliley
Как Замечание, вы можете использовать 'compact' вместо' delete_if {| x | x == nil} '. – vonconrad