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

cyber 10.12.2013 00:46

Maxmaxmaximus4, живой пример http://code.jquery.com/jquery-1.10.2.js

cyber 10.12.2013 00:51

Poznakomlus, кстати разница есть, но не особо существенная покрайней мере в хроме.

Maxmaxmaximus4 10.12.2013 01:00

Цитата:

Сообщение от Poznakomlus
в каждом цикле сколько раз длину массива вычисляем?

длинна при итерации, да и вообще обращения к свойствам кэшируются вообще-то.

Цитата:

Сообщение от Poznakomlus
и зачем дважды i объявлять

на всякий случай, вдруг буду менять код и уберу один цикл, а второй работать перестанет.
а есть какие-то причины этого не делать?

Цитата:

Сообщение от cyber

ну и , они пишут как я, у них пустые строки строго в нужных местах а у тебя везде. именно их стайл и стайл Three.js я и перенял

cyber 10.12.2013 01:04

Цитата:

Сообщение от Poznakomlus
верен в этом, у меня сложилось убеждение, что это обертка for

нет, я все же ошибся.

cyber 10.12.2013 01:04

Poznakomlus, а вот forEach нужно убрать нафиг

Maxmaxmaximus4 10.12.2013 01:06

Цитата:

Сообщение от cyber
а вот forEach нужно убрать нафиг

конечно)) вызов функции дорогая штука, создается контекст замыкания скоупы и прочее) я же не спроста заменил циклом.

cyber 10.12.2013 01:07

Цитата:

Сообщение от cyber
Poznakomlus, а вот forEach нужно убрать нафиг

хотя странно, я его убрал нечего не изменилось, а на другом примере он самый тормознутый

cyber 10.12.2013 01:08

Maxmaxmaximus4, эм, с forEach в среднем на 10 милесекунд быстрее О_О

cyber 10.12.2013 01:10

попробуй ты, а то я что то уже нехрена не пойму.
function compare(fArr,arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [],
        leng = fArr.length;
    
    for(var i = 0, index; i < leng; 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;

        };
  
    
    for(i = 0, leng = search.length; i < leng; i++ ) {
        if(search[i] !== undefined)
          insert.push(i);     
    };
    
    return {
        remove: remove,
        insert: insert,
        replace: replace
    }
    
}


function compare(fArr,arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [],
        leng = fArr.length;
    
    for(var i = 0, index; i < leng; 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 01:10

cyber, да мазафака, эти оптимизации хромовские не поймешь)


у меня кстати второй цикл вот такой, я исключаю лишние перемещения которые можно заменить реплейсами

for (var i = 0; i < nArr.length; i++) {
    if (nArr[i] === void 0) continue;
    var index = remove.indexOf(i);
    if (index < 0) insert.push(i);
    else remove.splice(index, 1);
  }


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