Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 12.01.2012, 13:44
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от рони Посмотреть сообщение
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 ;
    for (a = 0; a < c.length; a++) e[c[a]] && d.push(c[a]) && e[c[a]]--;
    return d.length == b.length && c.length == b.length
};
alert(duplicat([1,1,3,4,5],[5,4,3,1,1]))
alert(duplicat([1,1,3,4,5],[5,4,3,1,7]))
моя функция оптимальнее раз в 10)) можешь проверить)) у тебя столько ненужных вещей делается)
Ответить с цитированием
  #22 (permalink)  
Старый 12.01.2012, 14:48
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

А я бы использовал indexOf:
var a = [1,2,3];
var b = [1,4,3];

for (var i=0; i<b.length; i += 1){
    if(a.indexOf(b[i]) != -1){
        alert("Удаляем,"+b[i]);
    }
}


indexOf реализация для массивов и строк можно взять тут

А оптимизировать раньше времени, зло!

Скрипт с легкостью можно переписать чтобы он оставлял нужные или собирал их в отдельный массив.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #23 (permalink)  
Старый 12.01.2012, 16:40
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Gozar
А я бы использовал indexOf:
Могу ошибаться, но этот вариант в IE работать не будет.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #24 (permalink)  
Старый 12.01.2012, 16:50
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

в библиотеке underscore много функций для работы с массивами http://documentcloud.github.com/underscore/#arrays
может помогут?
Ответить с цитированием
  #25 (permalink)  
Старый 12.01.2012, 16:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Livaanderiamarum
моя функция оптимальнее раз в 10)) можешь проверить))
Проверил )))
var a = [],b = [];
for (var i=0; i<1000; i++)  {
 a[i] = i;
 b[i] = i;
}
var time = new Date();
function duplicat(b, c) {
    for (var d = [], e = {},a = 0; a < b.length; a++) e[b[a]]? e[b[a]]++:e[b[a]]=1 ;
    for (a = 0; a < c.length; a++) e[c[a]] && d.push(c[a]) && e[c[a]]--;
    return d.length == b.length && c.length == b.length
};
rez_duplicat = duplicat(a,b);
time_duplicat = new Date((new Date()).getTime()-time.getTime()).getTime();

time = new Date();
function test(arr, arr2){
	if(arr.length != arr2.length) return false
	var on = 0;
	for( var i = 0; i < arr.length; i++ ){
		for( var j = 0; j < arr2.length; j++ ){
			if(arr[i] === arr2[j]){
				on++
				break
			}
		}
	}
	return on==arr.length?true:false
}
rez_test = test(a,b);
time_test = new Date((new Date()).getTime()-time.getTime()).getTime();
alert("duplicat : " + rez_duplicat + " => time : " + time_duplicat + "\n"
 + "test : " + rez_test + " => time : " + time_test);
Ответить с цитированием
  #26 (permalink)  
Старый 12.01.2012, 17:01
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

ну вот(( твоя быстрее.( а как она работает?
Ответить с цитированием
  #27 (permalink)  
Старый 12.01.2012, 17:10
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от nerv_
Могу ошибаться, но этот вариант в IE работать не будет.
Не ошибаетесь, но дописать indexOf не очень сложно)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #28 (permalink)  
Старый 12.01.2012, 17:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Livaanderiamarum,
при длине массивов 1000 ваша функция обращаеться к массивам 500 тысяч раз моя всего 2 тысячи в этом и выигрыш по времени
Ответить с цитированием
  #29 (permalink)  
Старый 12.01.2012, 18:06
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от рони Посмотреть сообщение
Livaanderiamarum,
при длине массивов 1000 ваша функция обращаеться к массивам 500 тысяч раз моя всего 2 тысячи в этом и выигрыш по времени
Я это знаю я делаю полны перебор, я спросил как работает твоя?
Ответить с цитированием
  #30 (permalink)  
Старый 12.01.2012, 19:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Livaanderiamarum Посмотреть сообщение
/**
 * сравнивает 2 массива не учитывая порядок элементов
 * 
 * @param {Array}
 *            Первый массив
 * @param {Array}
 *            Второй массив
 * @return {Boolean}
 */
function test(arr, arr2){
	if(arr.length != arr2.length) return false
	var on = 0;
	for( var i = 0; i < arr.length; i++ ){
		for( var j = 0; j < arr2.length; j++ ){
			if(arr[i] === arr2[j]){
				on++
				break
			}
		}
	}
	return on==arr.length?true:false
}
//сравниваем раз
var arr = [ 'привет', 'зима', "нарядная" ];
var arr2 = [ 'нарядная', 'зима', 'привет' ];
alert(test(arr, arr2))

//сравниваем два
var arr = [ 'СТОЛ', 'зима', "нарядная" ];
var arr2 = [ 'нарядная', 'зима', 'привет' ];
alert(test(arr, arr2))
ой. узнаю метод пузырька!ещё в школе на информатике проходил.
но в методе пузырька даже меньше итераций, чем здесь :Р
Сообщение от Livaanderiamarum Посмотреть сообщение
моя функция оптимальнее раз в 10)) можешь проверить)) у тебя столько ненужных вещей делается)
он самый простой и самый медленный из существующих.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать два массива в один HackerSniper Общие вопросы Javascript 2 21.10.2011 04:33
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01