2016-07-05 10 views
0

Функция находит, какой символ персонажа пользователь сравнивает, основываясь на ответах на мои вопросы. Мой код сейчас очень неэффективен для нескольких меню выбора! Возможно, объект, который принимает все selectmenus в html и позволяет мне назначать значения массива на основе выбранного индекса selectmenu.Есть ли способ вытащить выбранный индекс выбранного меню в моем html, чтобы добавлять значения в разные массивы по моему выбору. Alot of code for 1 select menu

function onSelectMenuBlur() { 

    "use strict"; 
    /*list of arrays that will be added to when the user selects an option in a selectmenu.*/ 
    var rickArray = []; 
    var shaneArray = []; 
    var bobArray = []; 
    var carolArray = []; 
    var lArray = []; 
    var sm = document.getElementById("selectmenu"); 

. Функция обмена, которая определяет, какой массив будет добавлен в зависимости от параметра, выбранного в меню выбора. Эта функция добавит значение массива 1 к массиву. Похоже на неэффективный способ, особенно с несколькими selectmenus!

 sm.onchange = function() { 

     if(sm.selectedIndex + 1 === 1) { 
      rickArray.push(1); 
      shaneArray.pop(); 
      bobArray.pop(); 
      carolArray.pop(); 
      lArray.pop(); 
      alert(rickArray.length);    
      } 
     else if(sm.selectedIndex + 1 === 2) { 
      shaneArray.push(1); 
      rickArray.pop(); 
      bobArray.pop(); 
      carolArray.pop(); 
      lArray.pop(); 
      alert(shaneArray.length);   
      } 
     else if(sm.selectedIndex + 1 === 3) { 
      bobArray.push(1); 
      rickArray.pop(); 
      shaneArray.pop(); 
      carolArray.pop(); 
      lArray.pop(); 
      alert(bobArray.length);   
      } 
     else if(sm.selectedIndex + 1 === 4) { 
      carolArray.push(1); 
      rickArray.pop(); 
      shaneArray.pop(); 
      bobArray.pop(); 
      lArray.pop(); 
      alert(carolArray.length);   
      } 
     else if(sm.selectedIndex + 1 === 5) { 
      lArray.push(1); 
      rickArray.pop(); 
      shaneArray.pop(); 
      bobArray.pop(); 
      carolArray.pop(); 
      alert(lArray.length);   
      } 
      else{} 

    }; 

.onblur цель найти массив с самой большой длины или значения из всех selectmenus, чтобы определить, какой человек, связанный с массивом пользователь походит. Снова кажется неэффективным способом справиться!

sm.onblur = function() { 

     var rickL = rickArray.length; 

     var shaneL = shaneArray.length; 

     var bobL = bobArray.length; 

     var carolL = carolArray.length; 

     var lL = lArray.length; 

      // unfinished if else statement !! 
if(rickL > shaneL && rickL > bobL && rickL > carolL && rickL > lL) { 
     alert("you are Rick Grimes"); 
    } 
    else{ 
     alert("you are someone else"); 
     } 

    }; 
} 

ответ

0

Используйте двухмерный массив вместо отдельных массивов для каждого символа, а затем используйте выделенный индекс в качестве индекса в массиве.

var characters = [[], [], [], [], []]; 

sm.onchange = function() { 
    for (var i = 0; i < characters.length; i++) { 
     if (i == this.selectedIndex) { 
      characters[i].push(1); 
      alert(characters[i].length); 
     } else { 
      characters[i].pop(); 
     } 
    } 
}; 

Чтобы получить имена символов там, сделайте его массивом объектов.

characters = [ 
    { name: "Rick", 
     array: [] 
    }, 
    { name: "Carol", 
     array: [] 
    }, 
    ... 
} 

Тогда вы использовали бы characters[i].array.push(1). И затем, когда вы хотите сказать, какой символ они, найдите объект с самым длинным массивом, а затем распечатайте его .name.

+0

Hi Barmar Спасибо за помощь! Использование объекта массивов для символов велико, но не должно ли цикл for использовать символы [i] .array.push (1) вместо символа [i] .push (1) или у него другая цель? @Barmar – gpinson

+0

Вот что я сказал в предложении, начинающемся с «Тогда вы будете использовать». – Barmar

+0

Петля в верхней части ответа использует двумерный массив. Массив объектов - это изменение. – Barmar