Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2015, 10:35
M@x M@x вне форума
Новичок на форуме
Отправить личное сообщение для M@x Посмотреть профиль Найти все сообщения от M@x
 
Регистрация: 05.03.2015
Сообщений: 7

Количество одинаковых чисел в массиве
Добрый день. Помогите пожалуйста новичку. Имеется страница с несколькими селектами id которых family_0_stat_fm, family_1_stat_fm, family_2_stat_fm и т.д., у каждого селекта одинаковые значения 1,2,3. Скрипт использую такой
<script type="text/javascript">

onload = function () {
document.getElementById("submit").onclick = yesChange;
};

function yesChange() {
    
var arr = new Array();
arr[0] = document.getElementById("family_0_stat_fm").value;
arr[1] = document.getElementById("family_1_stat_fm").value;
arr[2] = document.getElementById("family_2_stat_fm").value;
/*arr[3] = document.getElementById("family_3_stat_fm").value;
arr[4] = document.getElementById("family_4_stat_fm").value;
arr[5] = document.getElementById("family_5_stat_fm").value;
arr[6] = document.getElementById("family_6_stat_fm").value;
arr[7] = document.getElementById("family_7_stat_fm").value;
arr[8] = document.getElementById("family_8_stat_fm").value;
arr[9] = document.getElementById("family_9_stat_fm").value;
arr[10] = document.getElementById("family_10_stat_fm").value;
arr[11] = document.getElementById("family_11_stat_fm").value;
arr[12] = document.getElementById("family_12_stat_fm").value;
arr[13] = document.getElementById("family_13_stat_fm").value;
arr[14] = document.getElementById("family_14_stat_fm").value;
arr[15] = document.getElementById("family_15_stat_fm").value;
arr[16] = document.getElementById("family_16_stat_fm").value;
arr[17] = document.getElementById("family_17_stat_fm").value;
arr[18] = document.getElementById("family_18_stat_fm").value;
arr[19] = document.getElementById("family_19_stat_fm").value;*/
document.write(arr + '<br />');
//var f = 0;
var arr2 = [];
for (var i=0; i<arr.length; i++) {
    for (var j=i+0; j<arr.length; j++) {
        if (arr[i]==arr[j]) {
            
            if(arr2[arr[i]]) {
                arr2[arr[i]] += 1;
            } else {
                arr2[arr[i]] = 1;
            }
            arr.splice(j, 1)
            j--;
        }
    }
}

for (key in arr2) 
{
    document.write(key + ' повторяется ' + arr2[key] + '<br />');
}
    
}
</script>

Скрипт срабатывает при нажатии кнопки "submit". Результат скрипта:
1,1,3
1 повторяется 2
3 повторяется 1
$family повторяется function (){return v; }
$constructor повторяется function Array() { [native code] }
each повторяется function (i,v){Array.forEach(this,i,v); return this;}
clone повторяется function (){var v=this.length,w=new Array(v); while(v--){w[v]=s(this[v]);}return w;}
clean повторяется function (){return this.filter(function(a){return a!=null;});}
invoke повторяется function (a){var b=Array.slice(arguments,1); return this.map(function©{return c[a].apply(c,b);});}
associate повторяется function ©{var d={},b=Math.min(this.length,c.length);for(var a=0;alink повторяется function ©{var a={};for(var e=0,b=this.length;econtains повторяется function (a,b){return this.indexOf(a,b)!=-1; }
append повторяется function (a){this.push.apply(this,a);return this;}
getLast повторяется function (){return(this.length)?this[this.length-1]:null;}
getRandom повторяется function (){return(this.length)?this[Number.random(0,this.length-1)]:null; }
include повторяется function (a){if(!this.contains(a)){this.push(a);}return this;}
combine повторяется function ©{for(var b=0,a=c.length;berase повторяется function (b){for(var a=this.length;a--;){if(this[a]===b){this.splice(a,1);}}return this;}
empty повторяется function (){this.length=0;return this;}
flatten повторяется function (){var d=[]; for(var b=0,a=this.length;bpick повторяется function (){for(var b=0,a=this.length;bhexToRgb повторяется function (b){if(this.length!=3){return null; }var a=this.map(function©{if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";}
rgbToHex повторяется function (d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return"transparent"; }var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?"0"+c:c);}return(d)?b:"#"+b.join("");}
extend повторяется function (a){this.push.apply(this,a);return this;}
min повторяется function (){return Math.min.apply(null,this); }
max повторяется function (){return Math.max.apply(null,this);}
average повторяется function (){return this.length?this.sum()/this.length:0;}
sum повторяется function (){var b=0,c=this.length; if©{while(c--){b+=this[c];}}return b;}
unique повторяется function (){return[].combine(this);}
shuffle повторяется function (){for(var c=this.length;c&&--c;){var b=this[c],d=Math.floor(Math.random()*(c+1)); this[c]=this[d];this[d]=b;}return this;}
rgbToHsb повторяется function (){var c=this[0],d=this[1],k=this[2],h=0;var j=Math.max(c,d,k),f=Math.min(c,d,k);var l=j-f;var i=j/255,g=(j!=0)?l/j:0; if(g!=0){var e=(j-c)/l;var b=(j-d)/l;var m=(j-k)/l;if(c==j){h=m-b;}else{if(d==j){h=2+e-m;}else{h=4+b-e;}}h/=6;if(h<0){h++;}}return[Math.round(h*360),Math.round(g*100),Math.round(i*100)]; }
hsbToRgb повторяется function (){var d=Math.round(this[2]/100*255);if(this[1]==0){return[d,d,d];}else{var b=this[0]%360;var g=b%60;var h=Math.round((this[2]*(100-this[1]))/10000*255); var e=Math.round((this[2]*(6000-this[1]*g))/600000*255);var c=Math.round((this[2]*(6000-this[1]*(60-g)))/600000*255);switch(Math.floor(b/60)){case 0:return[d,c,h]; case 1:return[e,d,h];case 2:return[h,d,c];case 3:return[h,e,d];case 4:return[c,h,d];case 5:return[d,h,e];}}return false;}

Не пойму, откуда берется код после "3 повторяется 1"? Должны выводиться только повторения в селектах. И еще вопрос: селектов у меня 20 штук и если я ставлю 20, то скрипт срабатывает, а если меньше - нет, как сделать, чтобы срабатывал на любое количество? Заранее огромное человеческое спасибо!

Последний раз редактировалось M@x, 05.03.2015 в 10:41.
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2015, 10:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от M@x Посмотреть сообщение
Имеется страница с несколькими селектами id которых family_0_stat_fm, family_1_stat_fm, family_2_stat_fm и т.д.
Скрипт использую такой
var arr = new Array();
arr[0] = document.getElementById("family_0_stat_fm").value;
arr[1] = document.getElementById("family_1_stat_fm").value;
arr[2] = document.getElementById("family_2_stat_fm").value;
/*arr[3] = document.getElementById("family_3_stat_fm").value;
arr[4] = document.getElementById("family_4_stat_fm").value;
arr[5] = document.getElementById("family_5_stat_fm").value;
arr[6] = document.getElementById("family_6_stat_fm").value;
arr[7] = document.getElementById("family_7_stat_fm").value;
arr[8] = document.getElementById("family_8_stat_fm").value;
arr[9] = document.getElementById("family_9_stat_fm").value;
arr[10] = document.getElementById("family_10_stat_fm").value;
arr[11] = document.getElementById("family_11_stat_fm").value;
arr[12] = document.getElementById("family_12_stat_fm").value;
arr[13] = document.getElementById("family_13_stat_fm").value;
arr[14] = document.getElementById("family_14_stat_fm").value;
arr[15] = document.getElementById("family_15_stat_fm").value;
arr[16] = document.getElementById("family_16_stat_fm").value;
arr[17] = document.getElementById("family_17_stat_fm").value;
arr[18] = document.getElementById("family_18_stat_fm").value;
arr[19] = document.getElementById("family_19_stat_fm").value;*/
Это называют "индусский код"...
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2015, 10:51
M@x M@x вне форума
Новичок на форуме
Отправить личное сообщение для M@x Посмотреть профиль Найти все сообщения от M@x
 
Регистрация: 05.03.2015
Сообщений: 7

Есть такое не смог придумать, как запихнуть элементы с похожим id в одну переменную

Последний раз редактировалось M@x, 05.03.2015 в 10:54.
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2015, 10:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

M@x,
вы запросили свойства обьекта Array вы их получили
для вывода значений нужен обычный for
а не in
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2015, 11:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

M@x,
Цитата:
Не используйте for..in для массивов
http://learn.javascript.ru/array#перебор-элементов
Ответить с цитированием
  #6 (permalink)  
Старый 05.03.2015, 11:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от M@x
не смог придумать, как запихнуть элементы с похожим id в одну переменную
В целях объединения неких элементов можно использовать тот же class...
Ответить с цитированием
  #7 (permalink)  
Старый 05.03.2015, 11:47
M@x M@x вне форума
Новичок на форуме
Отправить личное сообщение для M@x Посмотреть профиль Найти все сообщения от M@x
 
Регистрация: 05.03.2015
Сообщений: 7

Сообщение от ksa Посмотреть сообщение
В целях объединения неких элементов можно использовать тот же class...
Там проблема в том, что такой class не только у тех элементов из которых получаем значения
Ответить с цитированием
  #8 (permalink)  
Старый 05.03.2015, 13:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

M@x,

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
     function yesChange()
     {
       var  obj = {},select = document.querySelectorAll("[id^='family']"), show = document.querySelector(".show"),str = '' ;
         for (var i=0; i<select.length; i++)  {
           var num = select[i].value;
           obj[num] = (obj[num]||0)+1;
         };
         for(var k in obj)  str +=  k + ' повторяется ' + obj[k] + '<br />'
         show.innerHTML =  str
     }
  </script>
</head>

<body>
 <select name="" id="family_1_stat">
     <option >1</option>
     <option >2</option>
     <option >3</option>
 </select>
 <select name="" id="family_2_stat">
     <option >1</option>
     <option >2</option>
     <option >3</option>
 </select>
 <select name="" id="family_3_stat">
     <option >1</option>
     <option >2</option>
     <option >3</option>
 </select>
 <select name="" id="family_4_stat">
     <option >1</option>
     <option >2</option>
     <option >3</option>
 </select>
 <select name="" id="family_5_stat">
     <option >1</option>
     <option >2</option>
     <option >3</option>
 </select>

<button id="submit" onclick="yesChange()">submit</button>
<div class="show"></div>
 </body>

</html>
Ответить с цитированием
  #9 (permalink)  
Старый 05.03.2015, 13:34
M@x M@x вне форума
Новичок на форуме
Отправить личное сообщение для M@x Посмотреть профиль Найти все сообщения от M@x
 
Регистрация: 05.03.2015
Сообщений: 7

рони,
Огромное спасибо! Это то, что нужно!
Ответить с цитированием
  #10 (permalink)  
Старый 05.03.2015, 13:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от M@x
Там проблема в том, что такой class не только у тех элементов из которых получаем значения
Классов у элемента может быть достаточно много...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как и где задать цикл? Blondinka Events/DOM/Window 2 10.06.2014 15:29
подсчитать количество одинаковых элементов в массиве amf1k Серверные языки и технологии 1 07.02.2014 06:36
НОД более чем 2-х чисел Demath Общие вопросы Javascript 4 06.01.2013 05:27
Как получить количество дней до определенной даты beard Общие вопросы Javascript 3 24.06.2012 17:22
Как определить количество элементов в многомерном массиве Dima00782 Общие вопросы Javascript 3 12.06.2010 14:15