Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.11.2009, 23:23
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вам все еще неясна реализация?
ок, я напишу.
одно уточнение: какие выходные данные вам нужны?
Сообщение от awa
что число повторилось?
то есть в качестве параметров массив, и конкретное число, повторение которого надо определить, и на выходе да, или нет?
или что- то другое?
для пояснения :
var arr=[1,2,3,2,4,1,2,9,5,3];

var arr2={};
for(i in arr){
(arr2[arr[i]]!=undefined)?(arr2[arr[i]]++):(arr2[arr[i]]=1);
}
console.log(arr2);//число повторений для каждого элемента массива
Ответить с цитированием
  #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.
Ответить с цитированием
  #13 (permalink)  
Старый 30.11.2009, 16:24
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

А почему result -- массив? Для задач подобного плана предназначен хэш.
Ответить с цитированием
  #14 (permalink)  
Старый 30.11.2009, 17:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от e1f
Для задач подобного плана предназначен хэш.
С хэшем массив объектов не отфильтруешь.
Ответить с цитированием
  #15 (permalink)  
Старый 30.11.2009, 17:51
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Сообщение от Valstor Посмотреть сообщение
подскажите как можно проверить совпадения чисел в массиве
Но в принципе да, если делать -- то универсально.
Ответить с цитированием
  #16 (permalink)  
Старый 08.12.2011, 13:37
Интересующийся
Отправить личное сообщение для art13 Посмотреть профиль Найти все сообщения от art13
 
Регистрация: 05.12.2011
Сообщений: 17

Прочитал все посты и не могу понять.
У меня есть массив чисел. Нужно выявить из него все повторяющиеся, затем убрать их из этого массива, а количество повторений(общее) записать в переменную. Решение мной понимается так: сортируем массив и параллельно выносим из него все повторения складывая их в другой массив. Применяем при этом "массив.sort(функция)". Но вот то ли знаний то ли логики у меня не хватает. Помогите.
Ответить с цитированием
  #17 (permalink)  
Старый 09.12.2011, 12:07
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Использовал функцию сравнения, при этом не понимая, как она работает. "return a - b" вот это что такое? Я читаю как a минус b. Но какое отношение это имеет к сравнению?) Господа, если Вас не обременит, внесите ясность

art13, примерно так.
var x = [14, 7, 11, -1, 0, 12, 5, 3, 11, -1, 0, 7, 14];
x.sort(function(a, b) {return a - b;});
for(var j = 0, i = 1; i < x.length; i++) {
	if(x[i-1] === x[i]) {
		x.splice(i,1);
		i--;
		j++;
	}
}
alert('найдено дубликатов - ' + j);
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 09.12.2011 в 17:53.
Ответить с цитированием
  #18 (permalink)  
Старый 09.12.2011, 14:17
Интересующийся
Отправить личное сообщение для art13 Посмотреть профиль Найти все сообщения от art13
 
Регистрация: 05.12.2011
Сообщений: 17

Спасибо тебе добрый человек. От смерти спас. Я вот тоже так и не вкупил как a-b относится к сравнению. А запарился я именно с FOR. Ну теперь вижу куда копать нужно было.
Ответить с цитированием
  #19 (permalink)  
Старый 09.12.2011, 14:18
Интересующийся
Отправить личное сообщение для art13 Посмотреть профиль Найти все сообщения от art13
 
Регистрация: 05.12.2011
Сообщений: 17

Есть еще вот трактовка
http://www.eltisbook.ru/dhtml/massivi-javascript.php
Ответить с цитированием
  #20 (permalink)  
Старый 09.12.2011, 18:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

art13, спасибо за ссылку. Это еще я понять могу. Тут на мой взгляд все логично - сравниваем элементы и возвращаем позицию сдвига.
function obr(a, b) {
	if(a < b) return – 1;
	if(a == b) return 0;
	if(a > b) return 1;
}

а вот это дело не понятно.
function(a, b) {return a - b;}

Ну, допустим, a = 7, b = 14, следовательно, но a - b это 7 - 14 = -7 и что? Сдвигать на -7? Впрочем, есть одно предположение, сейчас его проверю Думается мне, что метод .sort распознает только три значения: -1, 0 и 1. А если к нему поступают другие, то он автоматически их "подгоняет".

Да, кажется, так оно и есть
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 09.12.2011 в 18:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачку---Найти сумму элементов массива uniQ Общие вопросы Javascript 3 02.05.2009 01:20
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01
Поиск элементов в контексте korzhik Events/DOM/Window 6 31.12.2008 11:35