Помогите с масивами пожалуйста
Есть массив - 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:38. |