Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как найти различие между двумя массивами? (https://javascript.ru/forum/offtopic/43511-kak-najjti-razlichie-mezhdu-dvumya-massivami.html)

рони 09.12.2013 19:00

Maxmaxmaximus4,
согласен если количество операций больше длины массива легче каждый элемент заново создать

cyber 09.12.2013 19:00

Цитата:

Сообщение от Maxmaxmaximus4
ш...што вы делаете наркоманы О_О

Я пытаюсь заставить программу делать вид что она работает, что бы ее можно было сдать курсовую)))

l-liava-l 09.12.2013 19:13

Цитата:

Я пытаюсь заставить программу делать вид что она работает, что бы ее можно было сдать курсовую)))
а где ты учишься, какой курс?

cyber 09.12.2013 19:15

Цитата:

Сообщение от l-liava-l
а где ты учишься, какой курс?

Технарь заканчиваю, хотя я так и понял чему там должны были учить, в след году буду постпупать в норм универ)
В общем программа на 100% рабочая, только не моя, если в 2х словах я сделал что то типо оболочки для другой программы, что бы не писать с 0 )

Maxmaxmaximus4 09.12.2013 19:58

Цитата:

Сообщение от cyber
Технарь заканчиваю

ВООТ она система образования) он СМОГ запилить алгоритм а я не смог))

cyber 09.12.2013 20:00

Цитата:

Сообщение от Maxmaxmaximus4
ВООТ она система образования) он СМОГ запилить алгоритм а я не смог))

:)
А в общем система образования говно редкое, потому что я так и не понял чему они меня должны были научить)

Maxmaxmaximus4 09.12.2013 20:02

Цитата:

Сообщение от рони
согласен если количество операций больше длины массива легче каждый элемент заново создать

просто знаешь зачем все эти оптимизации? у меня как оно щас работает, мы просто смотрим длинну массива, если увеличилась, то добавляем с конца новые элемента, если уменьшилась то удаляем с конца. А потом пробегаемся в цикле по $scope каждого элемента и засовываем туда $scope.item = arr[i] соответствущее значение и перерендериваем все. перерендериваются только ИЗМЕНИВШИЕСЯ ЗНАЧЕНИЯ, это неебически быстро работает если человек в массив добавляет новые значения В КОНЕЦ, и как раз новый элемент создается в конце, и только онперерендеривается так как у остальных элементов значения не изменились. А если мы добавляем новое значение в начало массива, то UI добавляет новый элемент в конец списка, и перерендеривает все элементы так как получается все сместились вниз на один. это ЯДЕРНО тупит если элементов больше 2000. Примерно 2 секунды тупит. Как и у ангуляра, и я хочу это исправить.

cyber 09.12.2013 20:42

Maxmaxmaximus4, а что не так с этим вариантом, тут порядок учитывает http://javascript.ru/forum/offtopic/...tml#post285530

Maxmaxmaximus4 09.12.2013 20:50

cyber, ну во первых там реплейс не выдает индексы элементов которые изменились. а именно это он должен делать, вместо этого он выдает какие то обьекты. во вторых я уже свае варганю, как доделаю покажу чо получилось.

cyber 09.12.2013 20:53

Цитата:

Сообщение от Maxmaxmaximus4
cyber, ну во первых там реплейс не выдает индексы элементов которые изменились. а именно это он должен делать, вместо этого он выдает какие то обьекты. во вторых я уже свае варганю, как доделаю покажу чо получилось

Ок, у меня тоже есть идея, если получиться выложу.

Maxmaxmaximus4 09.12.2013 20:54

мне не стоит забывать о том что цель у этого не просто получать неебаца идеальное решение а именно учитывать где именно добавился или удалился элемент, ни что не мешает мне потом в цикле пробежаться и значения новые присвоить так как рендерер перерисует только изменившиеся =) так что по сути достаточно слегка отфильтровать список remove и insert от одинаковых значений и в бой) твоя функция идеальная, простая, быстрая и просто ИДЕАЛЬНО как раз для этого подходит. я вообще не знаю с чего ты взял что она медленная у тебя, она гораздо быстрее всех "более правильных" аналогов.

cyber 09.12.2013 20:58

Цитата:

Сообщение от Maxmaxmaximus4
твоя функция идеальная, простая, быстрая и просто ИДЕАЛЬНО как раз для этого подходит. я вообще не знаю с чего ты взял что она медленная у тебя, она гораздо быстрее всех "более правильных" аналогов.

если она будет выполняться дольше 100 милесекунд для сравнения массивов 100 Х 100 то она будет медленная для меня)

Maxmaxmaximus4 09.12.2013 21:45

cyber, на пне четвертом сранивает 1000х массивы за 54 миллисекунд, я не знаю где ты вообще теслил

Maxmaxmaximus4 09.12.2013 22:41

на список 1000 элементов. вначале рисуется вся тысяча, потом pop и unshift делал


думаю вполне неплохо, щас буду сервис $animate пилить =) и вообще по сколку я отказался от ишаков ниже 10, то анимации будут только на css. кому надо будет запилят обычные анимации на яваскрипте. не трудно. 2014 год уже на дворе, хватит!

cyber 09.12.2013 22:47

Maxmaxmaximus4, согласен, чет я где то напортачил, щас все норм 4к элементов за 400 милесекунд обрабатывает.
Цитата:

Сообщение от Maxmaxmaximus4
на пне четвертом

современный у тебя пк)

Maxmaxmaximus4 09.12.2013 22:53






Цитата:

Сообщение от cyber
современный у тебя пк)

за то мои сайты летают))

Maxmaxmaximus4 09.12.2013 23:00

ну нахер он не работает на этом говенном сайте! тут все через жопу

cyber 09.12.2013 23:00

Maxmaxmaximus4, твой код не работает)
Цитата:

Сообщение от Maxmaxmaximus4
за то мои сайты летают))

мне всеравно на производительность сайтов которые я использую, сайт должен быть невероятно кривым что бы лагать у меня)

cyber 09.12.2013 23:00

Цитата:

Сообщение от Maxmaxmaximus4
ну нахер он не работает на этом говенном сайте! тут все через жопу

плохому танцору сайты мешают))

Maxmaxmaximus4 09.12.2013 23:02

Цитата:

Сообщение от cyber
плохому танцору сайты мешают))

к сожалению это не тот случай. или тот?

мдя, браузер почему то закэшировал скрипт ui старой версии, хотя Cache-Control:max-age=0 ну и что ты там говорил про танцора?

cyber 09.12.2013 23:04

Maxmaxmaximus4, просто если скрипт не работает в фрейме, значить с ним что то не так?

Maxmaxmaximus4 09.12.2013 23:09

Цитата:

Сообщение от cyber
просто если скрипт не работает в фрейме, значить с ним что то не так?

на чем основано утверждение что скрипт не работает во фрейме из-за того что он во фрейме а не по другим причинам?
например тут был баг когда пришлось очистить кэш вручную чтобы новая версия ui заработала, хотя время жизни стоит 0. теперь ты понял что был не прав пошутив про танцора?

ну а чо) норм так на пеньке то четвертом, а у вас что показывает? элементов

<script src='//mychamber.ru/build/ui.js'></script>

<ul controller="Chat">
  <button click="reverse()">reverse</button>
  
  <li repeat="item in items">{item}</li>
</ul>


<script>
  function Chat() {
    items = genArr(5000)
    reverse = function() {
      items = items.reverse()
    }
  }

  function genArr(cnt) {
    var arr = [];
    for (var i = 0; i < cnt; i++) {
      arr[i] = Math.round(Math.random()) ? Math.random() : i;
    }
    return arr;
  }
</script>

cyber 09.12.2013 23:25

Maxmaxmaximus4, я тут немного завис, как ты сделал scope для функции так что бы items не был глобальной переменной? О_о
П.с Возможно я уже туплю.

l-liava-l 09.12.2013 23:31

Цитата:

repeat: 4417.068ms
Intel® Core™ i3-3217U CPU @ 1.80GHz × 4

Пенек пеньком, бывает же такое))

Maxmaxmaximus4 10.12.2013 00:00

Цитата:

Сообщение от l-liava-l
Пенек пеньком, бывает же такое))

консоль то закрой когда тестишь)) ты не знал что она тормозит работу скрипта)??? консоль закрой потыкай а потом открывай смотри.

cyber 10.12.2013 00:01

Maxmaxmaximus4,, епать я затупил, короче можно сделать что бы в пару раз быстрее работало)
нужно добавить проверку
function compare(fArr,arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [];
    
    for(var i = 0, index; i < fArr.length; i++) {
        
      if(fArr[i] === arr[i]){// вот эта проверка
        
       delete search[i];
       continue;
      }
        
          
        index = search.indexOf(fArr[i]);

        if(!~index) {
          
            remove.push(i);
            continue;
        }
        
        i != index && replace.push({old: i, new: index});
        
        delete search[index];

        };
    
    search.forEach(function (elem, i) {
        if(elem)
          insert.push(i);     
    });
    
    return {
        remove: remove,
        insert: insert,
        replace: replace
    }
    
}

cyber 10.12.2013 00:05

Китайский городовой, ЕПАТЬ Я БЛ** кактус, короче массив на 10к элементов за 200 милесекунд
http://learn.javascript.ru/play/20fUc
function compare(fArr,arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [];
    
    for(var i = 0, index; i < fArr.length; i++) {
        
      if(fArr[i] === arr[i]){
        
       search[i] = null; // убираем на фиг delete
       continue;
      }
        
          
        index = search.indexOf(fArr[i]);

        if(!~index) {
          
            remove.push(i);
            continue;
        }
        
        i != index && replace.push({old: i, new: index});
        
         search[index] = null; // убираем на фиг delete

        };
    
    search.forEach(function (elem, i) {
        if(elem)
          insert.push(i);     
    });
    
    return {
        remove: remove,
        insert: insert,
        replace: replace
    }
    
}

Maxmaxmaximus4 10.12.2013 00:07

Цитата:

Сообщение от cyber
я тут немного завис, как ты сделал scope для функции так что бы items не был глобальной переменной? О_о

немного уличной магии ^_^ это не глобальная переменная это синтаксис такой, это поле контроллера, можем развернуть такие поля в текущий скоуп а можем развернуть в инстанс
controller='Ctrl as obj' и обращаться уже нужно будет уже как obj.items а не просто items
^____^

а еще есть frp стиль, в котором и рекомендуется писать. (это) синтаксис ячеек, если то что приравнивается в поле контроллера обернуто в ячейки то оно оборачивается в функцию и вешается геттер на это поле, так что значение там будет всегда актуальное.

<script src='//mychamber.ru/build/ui.js'></script>

<div controller="Ctrl">
  <button click="up()">up</button>
  {a} плюс {b} ровно: {c}
</div>


<script>
  function Ctrl() {
    a = 11
    b = 20
    c = (a + b)
    up = function() { a++ }
  }
</script>



cyber, почему ты проверяешь ячейку так if(elem) insert.push(i); ??

я что, нули не могу хранить в массиве теперь и пустые строки?

cyber 10.12.2013 00:12

Цитата:

Сообщение от Maxmaxmaximus4
я что, нули не могу хранить в массиве теперь и пустые строки?

Не будь ты индусом, замени null на undefined, эт я от радости не подумал

cyber 10.12.2013 00:13

function compare(fArr,arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [];
    
    for(var i = 0, index; i < fArr.length; i++) {
        
      if(fArr[i] === arr[i]){
        
       search[i] = undefined;
       continue;
      }
        
          
        index = search.indexOf(fArr[i]);

        if(!~index) {
          
            remove.push(i);
            continue;
        }
        
        i != index && replace.push({old: i, new: index});
        
         search[index] = undefined;

        };
    
    search.forEach(function (elem, i) {
        if(elem !== undefined)
          insert.push(i);     
    });
    
    return {
        remove: remove,
        insert: insert,
        replace: replace
    }
    
}

Maxmaxmaximus4 10.12.2013 00:13

cyber,
ты об этом =)?


cyber 10.12.2013 00:13

щас проверю на баги наверняка, но вроде все ок)

cyber 10.12.2013 00:14

Maxmaxmaximus4,
убирай delete - это невероятно тормознутая хрень)

Maxmaxmaximus4 10.12.2013 00:16

Цитата:

Сообщение от cyber
это невероятно тормознутая хрень)

чо правда? О_О да ладно, это не сарказм, ты серьезно?

cyber 10.12.2013 00:20

Цитата:

Сообщение от Maxmaxmaximus4
чо правда? О_О да ладно, это не сарказм, ты серьезно?

я почему то позновато вспомнил об этом)

Цитата:

Сообщение от Maxmaxmaximus4
я уже не могу пустые строки и нули хранить)? их мы за людей не считаем?

храни на здоровье)
"" === undefined// false
null === undefined// false

Maxmaxmaximus4 10.12.2013 00:22

Цитата:

Сообщение от cyber
убирай delete - это невероятно тормознутая хрень)

ОХ ЕБАААААААААААТЬ111111111 с 120 миллисек до 30 сразу11111111111111 ОХРЕНЕТЬ ПРОСТО!!!1 НО КАААААК????????




Цитата:

Сообщение от cyber
храни на здоровье)

да я тупанул у тя раньше там было (!elem)

cyber 10.12.2013 00:24

Maxmaxmaximus4, меня в какой то момент осенило что я когда то читал что delete лучше не использовать в цикле)

cyber 10.12.2013 00:25

Maxmaxmaximus4, только подожди радываться не все сходиться

Maxmaxmaximus4 10.12.2013 00:26

а я инстинктивно думал что он такой весь из себя нативный внутренний мегаскоростной так как просто удаляет ключ обьекта. охренеть! ОХРЕНЕТЬ ТЫ ГЕНИЙ!111 Я СЕРЬЕЗНО!!1 2к элементов на пне четверном инициализируются 160 миллисек а меняются местами 30 миллисек.

Maxmaxmaximus4 10.12.2013 00:29

Цитата:

Сообщение от cyber
только подожди радываться не все сходиться

короче вот моя функция реплейсы нахуй не нужны лишнее это, у меня и так только изменения рендерятся по этому я просто пробегаюсь циклом потом и устанавливаю всем "новые" значения


Часовой пояс GMT +3, время: 19:26.