Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск и сравнение в массиве (https://javascript.ru/forum/misc/15993-poisk-i-sravnenie-v-massive.html)

Zhiganov 22.03.2011 15:38

Поиск и сравнение в массиве
 
Здравствуйте. Код прокомментирован и надеюсь понятно, что я хочу сделать. Проблема с поиском и сравнением в массиве.
И еще подскажите наиболее простой и компактный метод удаления повторяющихся значений из массива.

function magic(){
var mytext = document.getElementById('countries').innerHTML; // получаем форматированный текст в виде страна|город#страна|город#...
var our_country = document.filterform.cscountry[document.filterform.cscountry.selectedIndex].value; // получаем страну, которую выбрал пользователь
		
var myArray = new Array();
myArray = mytext.split('#'); // делим текст на строчки страна|город и пишем в массив 
		
if (myArray.join().search(our_country) != -1) {
		myArrayCity = myArray.split('|');
		country=myArrayCity[0];
		city=myArrayCity[1];
		var anOption = document.createElement("OPTION") 
		document.filterform.cscity.options.add(anOption) 
		anOption.innerText = myArrayCity[1];
		anOption.Value = myArrayCity[1]; }
		} // если наша страна есть в какой-то строке массива, то делим ее пополам и добавляем город в select
		</script>

рони 22.03.2011 16:38

Zhiganov,
А может без массива?
function city(country)
{
var city = 'нет';
var mytext = "страна1|город1#страна2|город2#страна3|город3#страна4|город4#страна5|город5#";
var reg = new RegExp(".*"+country+"\\|(.*?)#.*")
if(reg.test(mytext))city = mytext.replace(reg, "$1");
return city
}

alert([city('страна3'),city('страна10')])

Zhiganov 22.03.2011 17:10

Рони, совсем не понял как этим пользоваться применительно к моему случаю, ничего не выводит.

function city(country){
		var mytext = document.getElementById('countries').innerHTML;
		var country = document.filterform.cscountry[document.filterform.cscountry.selectedIndex].value;
		var reg = new RegExp(".*"+country+"\\|(.*?)#.*");
		if(reg.test(mytext))country = mytext.replace(reg, "$1"){
		alert([city(country)]);
		}

Sweet 22.03.2011 17:15

Цитата:

Сообщение от Zhiganov
подскажите наиболее простой и компактный метод удаления повторяющихся значений из массива.

Почитайте здесь

рони 22.03.2011 18:26

Цитата:

Сообщение от Zhiganov
Рони, совсем не понял как этим пользоваться применительно к моему случаю, ничего не выводит.

Примерно так ... но если знать что вы на самом деле хотите, возможно есть проще варианты)))
<script  type="text/javascript">
function magic(){
var mytext = document.getElementById('countries').innerHTML;
var form = document.filterform;
var our_country = form.cscountry[form.cscountry.selectedIndex].value;
var reg = new RegExp(".*"+our_country+"\\|(.*?)#.*")
if(our_country&&reg.test(mytext)){
var city = mytext.replace(reg, "$1");
var cscity = document.filterform.cscity;
cscity.options[cscity.options.length] = new Option(city, our_country);
}}
</script>
<form name="filterform" action="http://">
 <div id="countries">страна1|город1#страна2|город2#страна3|город3#страна4|город4#страна5|город5#</div>
 <select name="cscountry" size="3">
 <option value="" selected="selected">Выберите страну</option>
 <option value="страна1" >страна1</option>
 <option value="страна2" >страна2</option>
 <option value="страна3" >страна3</option>
 <option value="страна4" >страна4</option>
 <option value="страна5" >страна5</option>
 </select>
 <select name="cscity" size="3">
 </select>
 <input type="button" name="test" value="Go"  onclick="magic()"/>
 </form>

Zhiganov 23.03.2011 14:10

Вчера отключили интернет и не мог зайти.

Sweet, благодарю, сейчас почитаю.

рони, спасибо, но я не пробовал, сделал перебор в массиве через for, оказалось все просто.


Часовой пояс GMT +3, время: 15:34.