| 
	| 
	
	| 
		
	| 
			
			 
			
				12.01.2012, 19:18
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| Livaanderiamarum, 
 Дока :
 
function duplicat(b, c) {
    for (var d = [], e = {},a = 0; a < b.length; a++) e[b[a]]? e[b[a]]++:e[b[a]]=1 ;
    // создаём обьект c, где ключами являются значения первого массива
    // e[b[a]]? -> ключ есть ? это на тот случай если значения повторятся в массиве
    // увеличиваем значение ключа на 1
    // иначе если ещё ключа нет с таким значением
    // создаём ключ со значением 1
    for (a = 0; a < c.length; a++) e[c[a]] && d.push(c[a]) && e[c[a]]--;
    //пробегаемся по второму массиву
    // смотрим если значение элемента массива  среди ключей
    // нами созданного обьекта  и его значение ещё не ноль -> e[c[a]]
    // если ключ есть, заносим ключ в промежуточный массив d -> d.push(c[a])
    // значение самого ключа уменьшаем
    return d.length == b.length && c.length == b.length
    // проверяем длину промежуточного массива d c длиной массива b
    // они должны совпадать ->  d.length == b.length
    // плюс  должна совпадать  размерность исходных массивов -> c.length == b.length
    // последнюю проверку можно поставить в начало
};
Ок? 
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 19:37
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| Livaanderiamarum, 
 Итого ))) 
 
function duplicat(b, c) {
    if(b.length != c.length) return !1;
    // должна совпадать  размерность исходных массивов -> c.length == b.length
    for (var d = 0, e = {},a = 0; a < b.length; a++) e[b[a]]? e[b[a]]++:e[b[a]]=1 ;
    // создаём обьект e где ключами являются значения первого массива
    // e[b[a]]? -> ключ есть ? это на тот случай если значения повторятся в массиве
    // увеличиваем значение ключа на 1
    // иначе если ещё ключа нет с таким значением
    // создаём ключ со значением 1
    for (a = 0; a < c.length; a++) e[c[a]] && d++ && e[c[a]]--;
    // пробегаемся по второму массиву
    // смотрим если значение элемента массива  среди ключей
    // нами созданного обьекта  и его значение ещё не ноль -> e[c[a]]
    // если ключ есть, увеличиваем счётчик d -> d++
    // значение самого ключа уменьшаем
    return d == b.length;
    // проверяем счётчик d c длиной массива b
    // они должны совпадать ->  d == b.length
    };
 |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 19:54
			
			
			
		 |  
	| 
		
			
			| sinistral     |  | 
					Регистрация: 28.03.2011 
						Сообщений: 5,418
					 
		
 |  |  
	| написано без учёта повторений одинаковых значений в массивах. 
function compare(arr1, arr2){
    if(arr1.length !== arr2.length) return false;
    var i = 0, a = {};
    // заносим в хеш значения первого массива.
    while(i in arr1) {
        // если на одинаковых позициях стоят одинаковые элементы, то зачем их проверять дальше?
        if(arr1[i] !== arr2[i])
            a[arr1[i]] = undefined;    
        i += 1;
    }
    // проходимся по элементам второго массива
    // если значения нет в хеше (т.е. нет в первом массиве, то сразу возвращается false
    while(i--) if(!(arr2[i] in a)) return false;
    // массивы похожи
    return true;
};
var a = ['a','b','c'], b = ['a','b','СТУЛ'], c = ['b','c','a'];
alert([compare(a,c), compare(b,c)]);
почему я использовал хеши и in ? на хабре увидел статью про то, что время на проверку существования через in во всех браузерах всегда равно нулю   
хотя вместо хеша можно было бы использовать массив первый и indexOf... но это не для IE.			 Последний раз редактировалось melky, 12.01.2012 в 21:49.
 |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 20:20
			
			
			
		 |  
	| 
		
			|  | Тлен       |  | 
					Регистрация: 02.01.2010 
						Сообщений: 6,601
					 
		
 |  |  
	| Ваши решения не учитывают маааленький нюанс - массивы могут быть и такими: 
[ 1, '2', function b(){}, {c:d} ]
				__________________ 29375, 35
 |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 20:29
			
			
			
		 |  
	| 
		
			
			| sinistral     |  | 
					Регистрация: 28.03.2011 
						Сообщений: 5,418
					 
		
 |  |  
	| 
	
 
	| Сообщение от Aetae   |  
	| Ваши решения не учитывают маааленький нюанс - массивы могут быть и такими: 
[ 1, '2', function b(){}, {c:d} ]
 |  
	
 условия :
 
	
 
	| Сообщение от bohdantheone   |  
	| 1) размеры массивов могут отличаться - да 2) у тя в них только строки будут - да
 3) строки могут быть одинаковые -да
 4) что в твоем понимании ПОХОЖИЕ - id1=id1
 |  
	
 |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 20:52
			
			
			
		 |  
	| 
		
			
			| Профессор     |  | 
					Регистрация: 25.12.2011 
						Сообщений: 786
					 
		
 |  |  
	| 
	
 
	| Сообщение от Aetae   |  
	| Ваши решения не учитывают маааленький нюанс - массивы могут быть и такими: 
[ 1, '2', function b(){}, {c:d} ]
 |  
	
 ПО этому я и не использовал метод зансения ЗНАЧЕНИЙ в ИМЕНА свойств обьекта, хотя это была первая мысль. Да и делал функцию не для Опа, а для развлечения скорее. |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 20:55
			
			
			
		 |  
	| 
		
			
			| Профессор     |  | 
					Регистрация: 25.12.2011 
						Сообщений: 786
					 
		
 |  |  
	| 
	
 
	| Сообщение от melky   |  
	| я сделал так : 
 
 
function compare(arr1, arr2){
    if(arr1.length !== arr2.length) return false;
    var i = 0, a = {};
    // заносим в хеш значения первого массива.
    while(i in arr1) {
        a[arr1[i++]] = undefined;    
    }
    // проходимся по элементам второго массива
    // если значения нет в хеше (т.е. нет в первом массиве, то сразу возвращается false
    while(i--) if(!(arr2[i] in a)) return false;
    // массивы похожи
    return true;
};
var a = ['a','b','c'], b = ['a','b','СТУЛ'], c = ['b','c','a'];
alert([compare(a,c), compare(b,c)]);
 |  
	
 Метод пузырька )) только в методе пузырька итераций меньше и можно сравнивать НЕ ТОЛЬКО строки)) |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 21:08
			
			
			
		 |  
	| 
		
			
			| Профессор     |  | 
					Регистрация: 25.12.2011 
						Сообщений: 786
					 
		
 |  |  
	| Напишите ка умельцы наши функцию быстрее чем моя для ПРОСТО СРАВНЕНИЯ двух массивов, при условии что в них лежат примитивные значения) и при  условии что массивы раной длинны не равны. иными словами сравнить массивы игнорируя порядок элементов) |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 21:21
			
			
			
		 |  
	| 
		
			|  | 猫       |  | 
					Регистрация: 07.06.2007 
						Сообщений: 7,504
					 
		
 |  |  
	| 
	
 
	| Сообщение от nerv_   |  
	| Могу ошибаться, но этот вариант в IE работать не будет. |  
	
 Чем тебя не устроила реализация: 
 
	
 
	| Цитата: |  
	| indexOf is a recent addition to the ECMA-262 standard |  
	
 данная по ссылке?
 
Вопрос ко всем - А где выполняется условие:
 
	
 
	| Сообщение от bohdantheone   |  
	| итоговый вариант - выбранные сообщения будут удалятся |  
	
 true false насколько я понял вообще не нужны ТС.
				__________________Последний раз редактировалось Gozar, Сегодня в 24:14.
 |  |  
	| 
		
	| 
			
			 
			
				12.01.2012, 21:30
			
			
			
		 |  
	| 
		
			
			| sinistral     |  | 
					Регистрация: 28.03.2011 
						Сообщений: 5,418
					 
		
 |  |  
	| 
	
 
	| Сообщение от Livaanderiamarum   |  
	| Метод пузырька )) только в методе пузырька итераций меньше и можно сравнивать НЕ ТОЛЬКО строки)) |  
	
 специально для тебя апнул ту функцию. если на одинаковых позициях будут стоять одинаковые элементы, то количество итераций во втором цикле уменьшится.
 
ты вообще знаешь этот алгоритм? в чём он заключается и как работает?
 
	
 
	| Сообщение от Gozar   |  
	| true false насколько я понял вообще не нужны ТС. |  
	
 верно.. но данная тема уже страницу назад переросла из совета в очередное  испытание меряние.			 Последний раз редактировалось melky, 12.01.2012 в 21:36.
 |  |  |  |