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



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

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

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

    собака - (количество упоминаний) - 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) );


  • administrators

    @DrPrime

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

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


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


  • administrators

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


  • administrators

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



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



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


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.