Показать сообщение отдельно
  #12 (permalink)  
Старый 28.11.2009, 00:47
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от 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());

Последний раз редактировалось Riim, 28.11.2009 в 00:56.
Ответить с цитированием