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

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
    }
    
}


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