Помогите с масивами пожалуйста
Есть массив - 5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1
Как сделать из него другой массив, чтобы каждое из значений осталось только одно с условиями, что чем больше одинаковых значений в данном массиве, тем первее оно стоит. Если каких то из значений одинаковое количество, то первее должно стоять то, которое больше. Благодарю. |
Для начала создадим карту массива.
var map = {}; Затем положим в эту карту по ключам значений массива количество их повторов. var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1]; for (var i = 0; i < arr.length - 1; i++) { if (!map[arr[i]]) { map[arr[i]] = 1; } if (arr[i] == arr[i+1]) { map[arr[i]]++; } } Создадим массив, в котором будет результат и наполним его. var result = []; for (var i in map) result.push(i); Отсортируем массив согласно ваших условий: result.sort(function (a, b) { if (map[a]>map[b]) { return 1; } else if (map[a]<map[b]) { return -1; } else if (map[a]==map[b]) { return a-b; } }); Итого: var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1], map = {}, result = []; for (var i = 0; i < arr.length - 1; i++) { if (!map[arr[i]]) { map[arr[i]] = 1; } if (arr[i] == arr[i+1]) { map[arr[i]]++; } } for (var i in map) result.push(parseInt(i)); result.sort(function (a, b) { if (map[a]>map[b]) { return 1; } else if (map[a]<map[b]) { return -1; } else if (map[a]==map[b]) { return a-b; } }); alert(result); |
BorisBritva,
:) var arr = [5,5,5,3,3,3,3,3,2,2,2,2,1,1,1,1,1], map = {}, result = [];; arr.forEach(function (a) { map[a] ? map[a]++ : map[a] = 1 }); result = Object.keys(map); result.sort(function (a, b) { return map[a] - map[b] || a - b }); alert(result) |
Часовой пояс GMT +3, время: 04:34. |