Обработка списка



  • Суть следующая.
    Есть список с повторяющимися значениями, например

    собака
    кошка
    птица
    кошка
    птица
    кошка
    птица
    собака
    

    Нужно обработать список и получить результат:

    собака - (количество упоминаний) - 2
    кошка - 3
    птица - 3
    

    Есть у кого то идеи какие то?



  • @DrPrime может сперва получить количество элементов списка - затем - удалить по значению например собака и после каждого удаления значения получить количество строк, и арифметикой получить разницу до удаления и после?

    так же наверное можно регуляркой распарсить список и получить количество элементов



  • This post is deleted!


  • @Turutur спасибо, первый способ помог.
    Хотя похоже больше на костыль.
    Пытался сделать через arr.filter, но почему то не вышло



  • Все таки способ немного не подходит
    делаю так:
    forreach список:
    получаю длину списка
    удаляю forreach data со списка
    получаю длину списка
    разницу вывожу в переменную
    вывожу результат - forreach data:количество упоминаний

    Но все равно в forrech data попадают элементы списка, которые уже были посчитаны, и в результаты попадают элементы с упоминанием 0
    Временно сделал в средине после получения разницы, если она равна 0 то начинается следующая итерация, но все равно как то не то



  • function unique(arr) {
    var result = [];

    nextInput:
    for (var i = 0; i < arr.length; i++) {
    var str = arr[i]; // для каждого элемента
    for (var j = 0; j < result.length; j++) { // ищем, был ли он уже?
    if (result[j] == str) continue nextInput; // если да, то следующий
    }
    result.push(str);
    }

    return result;
    }

    var strings = [
    "собака",
    "кошка",
    "птица",
    "кошка",
    "птица",
    "кошка",
    "птица",
    "собака"
    ];

    alert( unique(strings) );



  • @DrPrime

    Вот более менее простой способ решения проблемы на js

    [[LIST]] = ['собака', 'кошка', 'птица', 'кошка', 'птица', 'кошка', 'птица', 'собака']
    [[HASH]] = [[LIST]].reduce(function(hash, elem){ hash[elem] = (hash[elem] || 0) + 1; return hash }, {})
    log(JSON.stringify([[HASH]]))
    


  • @support Чем является HASH в данном случае. Как его дальше обрабатывать?



  • @DrPrime Ассоциативный массив.Ключ - строка, значение - количество раз, которое встречается строка.
    https://learn.javascript.ru/object



  • Есть еще идея - вместе с модулем "Список" сделать модуль для работы с ассоциативными массивами.



  • @support да, неплохо бы



  • @support я пока распарсил его костылями, так как нужно было отсеять по количеству упоминаний значения, счас буду разбираться как сделать это "как положено"


Log in to reply