За последние 24 часа нас посетили 18694 программиста и 1592 робота. Сейчас ищут 1903 программиста ...

Посчитать значения в массиве

Тема в разделе "JavaScript и AJAX", создана пользователем nikemat, 7 авг 2015.

  1. nikemat

    nikemat Guest

    Есть некий массив. Создал цикл, который подсчитывает значения в нем.
    Подсчитывает правильно. как сделать, чтобы он выдавал немного в другом формате, для всех ключей?
    Код (PHP):
    1. var counter = {};
    2. var ar_q=new Array(
    3.         ['2.08.15', '000',0,0,0,0,0,0,0,0,'', '2015-08-02'],
    4.     ['2.08.15', 'Виталий',0,0,0,0,0,0,0,0,'', '2015-08-02'],
    5. ['2.08.15', 'Артур',0,0,0,0,0,0,0,0,'', '2015-08-02'],
    6. ['2.08.15', 'имя',2,3,4,4,4,5,5,1,'орррррррр', '2015-08-02'],
    7. ['2.08.15', 'Александр',1,2,3,4,5,6,7,1,'привет', '2015-08-02'],
    8. ['30.07.15', '000',0,0,0,0,0,0,0,0,'', '2015-07-30'],
    9. ['30.07.15', 'Виталий',0,0,0,0,0,0,0,0,'', '2015-07-30'],
    10. ['30.07.15', 'Артур',1,2,3,4,5,6,7,0.5,'kkkkkkkkk', '2015-07-30'],
    11. ['30.07.15', 'имя',0,0,0,0,0,0,0,0,'', '2015-07-30'],
    12. ['30.07.15', 'Александр',0,0,0,0,0,0,0,0,'', '2015-07-30'],
    13. ['29.07.15', '000',0,0,0,0,0,0,0,0,'', '2015-07-29'],
    14. ['29.07.15', 'Виталий',0,0,0,0,0,0,0,0,'', '2015-07-29'],
    15. ['29.07.15', 'Артур',0,0,0,0,0,0,0,0,'', '2015-07-29'],
    16. ['29.07.15', 'имя',3,9,0,4,0,2,0,0,'', '2015-07-29'],
    17. ['29.07.15', 'Александр',3,15,1,1,6,1,1,1,'1', '2015-07-29']
    18.        );
    19.  
    20. function itog(){
    21. var counter = {};
    22. for(var i in ar_q){
    23. var current = ar_q[i];
    24.     var name = current[1];
    25.     var value = current[2];
    26.     if(counter[name] == undefined){
    27.     counter[name] = 0;
    28.     }
    29.  
    30.     counter[name]+= value;
    31.     }
    32.     return counter;
    33. }
    34.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    это если привести к типу строка, то можно сделать с помощью explode
     
  3. nikemat

    nikemat Guest

    это javascript) там не explode, там split))
    походу так и придется писать ... current[2] + current[3] + ... + current[8] + current[9] ...
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    на код не обратил внимания)

    Добавлено спустя 2 минуты 40 секунд:
    тогда split и все вопросы вроде решаются. далее имеем на выходе что надо
     
  5. nikemat

    nikemat Guest

    так самое главное в коде, как не обращать внимания на него)
    и это результат выполнения по одному ключу, а их 9)
    какую-то часть этого кода надо зациклить, от 2 до 10) а где цикл вставить- не знаю(

    сейчас в цикле консоль выдает так:
    а надо как в первом примере. и никак её не сплиттить. даже если counter- не объект а массив...(
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    По идее, код уж не особо был важен, когда я увидел в каком виде у тебя данные, подумал ты имеешь их в виде строки.

    вот функция, на выходе имеем массив result[0] вернет 000:00000000 и так далее для всех. Или можешь изменить его так чтобы возвращал сразу форматированную строку.
    Код (PHP):
    1. function result(array) {
    2.         for (= 0; i < array.length; i++) {
    3.             arr = array[i];
    4.             name = arr[1];
    5.             value = "" + arr[2] + arr[3] + arr[4] + arr[5] + arr[6] + arr[7] + arr[8] + arr[9];
    6.             result[i] = name + ":" + value;
    7.             
    8.         }
    9.     return result;
    10.     }
    Добавлено спустя 18 минут 42 секунды:
    да, оказалось split там не подходил.
     
  7. nikemat

    nikemat Guest

    так-то я сам писал ещё в 10 лет назад)) не то всё...(( не работает как нужно. потестируй.
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    return в цикле забыл ). Должен работать ша.
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Результат в песочнице
    Код (PHP):
    1. for(var i = 0; i < ar_q.length; i++) {
    2.     var name = ar_q[i][1],
    3.         nums = ar_q[i].slice(2, 10);
    4.     if(!counter.hasOwnProperty(name)) {
    5.         counter[name] = nums;
    6.     } else {
    7.         for(var j = 0; j < nums.length; j++) {
    8.             counter[name][j] += nums[j];
    9.         }
    10.     }
    11. }
     
  10. nikemat

    nikemat Guest

    по результату похоже на то что нужно, пошёл применять. спасибо.
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Код (PHP):
    1.     function result(array) {
    2.         var res = {};
    3.         for (= 0; i < array.length; i++) {
    4.         arr = array[i];
    5.                 name = arr[1];
    6.                 value = "" + arr[2] + arr[3] + arr[4] + arr[5] + arr[6] + arr[7] + arr[8] + arr[9];
    7.                 res[i] = name + ":" + value;
    8.                 
    9.         }
    10.         return res;
    11.         
    12.     } 
    результат
    Код (Text):
    1. Object {0: "000:00000000", 1: "Виталий:00000000", 2: "Артур:00000000", 3: "имя:23444551", 4: "Александр:12345671", 5: "000:00000000", 6: "Виталий:00000000", 7: "Артур:12345670.5", 8: "имя:00000000", 9: "Александр:00000000", 10: "000:00000000", 11: "Виталий:00000000", 12: "Артур:00000000", 13: "имя:39040200", 14: "Александр:315116111"}
     
  12. nikemat

    nikemat Guest

    а как всё это попроще в html таблицу загнать?) имя, разумеется, тоже должно само ставиться. цикл новый нужен?
    Код (Text):
    1. <table><tr><td>Александр</td><td>'+counter['Александр'][0]+'</td><td>'+counter['Александр'][1]+'</td><td>'+counter['Александр'][2]+'</td><td>'+counter['Александр'][3]+'</td><td>'+counter['Александр'][4]+'</td></tr></table>
    ну или хотя бы как кол-во уникальных имен получить
     
  13. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    А разве это не очевидно? )) По ходу пьесы, в JS не ждите каких-то "волшебных" функций, как в том же PHP...
    Код (PHP):
    1. var names = Object.keys(counter); // вернет вам массив этих имен 
     
  14. nikemat

    nikemat Guest

    получилось! :) спс.
    Код (Text):
    1. var names = Object.keys(counter);
    2. var ret='';
    3. for(a=0;a<names.length;a++){
    4. unam=names[a];
    5. ret+='<tr><td>'+unam+'</td>';
    6.     for(x=0;x<counter[unam].length;x++){
    7. ret+='<td>'+counter[unam][x]+'</td>';
    8. }
    9. ret+='</tr>';
    10. }