@paini, это обычное поведение .sort(), используйте вместо этого _sort_arr()
@GhostZ said in Сортировка списка по имени:
Выполнить кода: _sort_arr([[LIST]]), для сортировки в обратном порядке: _sort_arr([[LIST]], false)
Суть следующая.
Есть список с повторяющимися значениями, например
собака
кошка
птица
кошка
птица
кошка
птица
собака
Нужно обработать список и получить результат:
собака - (количество упоминаний) - 2
кошка - 3
птица - 3
Есть у кого то идеи какие то?
@DrPrime может сперва получить количество элементов списка - затем - удалить по значению например собака и после каждого удаления значения получить количество строк, и арифметикой получить разницу до удаления и после?
так же наверное можно регуляркой распарсить список и получить количество элементов
Все таки способ немного не подходит
делаю так:
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) );
Вот более менее простой способ решения проблемы на js
[[LIST]] = ['собака', 'кошка', 'птица', 'кошка', 'птица', 'кошка', 'птица', 'собака']
[[HASH]] = [[LIST]].reduce(function(hash, elem){ hash[elem] = (hash[elem] || 0) + 1; return hash }, {})
log(JSON.stringify([[HASH]]))