Сообщение от Gvozd
|
если у вас в массиве простые типы данных, то заводите дополнительный массив, куда перебирая в один цикл элементы ложим элементы с индексом равным значению элементу, а значением, равным количеству повторений(ну, или любую другую инфу в зависимости от конечной задачи)
потом из этого массива уже получаете нужные цифры(количество повторений, количество не повторяющихся элементов,...)
|
вроде то же самое, но не только для простых типов данных, для любых:
Array.prototype.scan = function() {
for (var values = [], counts = [], i = 0, length = this.length; i < length; i++) {
var j = values.indexOf(this[i]);
if (j < 0) {
values.push(this[i]);
counts.push(1);
} else counts[j]++;
}
return [values, counts];
};
alert([1, 2, 3, 4, 5, 2, 6, 7, 1, 2, 1, 5, 1, 1, 2].scan().join('\r\n'));
Сообщение от Gvozd
|
или приводите исходный массив к нужному виду в цикле(удаляете повторы всех элементов, конкретных элементов,...)
|
сложновато получилось, поскольку я всячески старался улучшить производительность:
Array.prototype.unique = function() {
var result = [], i = 0, j = 0, length = this.length;
while (i < length) {
var I = this[i++], k = j;
while (k-- && result[k] !== I);
if (k < 0) result[j++] = I;
}
return result;
};
alert([1, 2, 3, 4, 5, 2, 6, 7, 1, 2, 1, 5, 1, 1, 2].unique());