Показать сообщение отдельно
  #38 (permalink)  
Старый 20.02.2014, 01:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
Cваял версию 2
Не очень то она отличается от уже предложенной

Отбросил медленные варианты:

(function(){

var array = [],
arrayLength = 6000;
for (var i = 0; i < arrayLength; i++) {
    array.push(parseInt(Math.random()*arrayLength));
}

/**
 * @author рони
 **/
function test1() {
    var result = [];
    var clone = array.slice();
    clone.sort(function (a, b) {
        return a - b;
    });
    for (var i = 0; i < clone.length; i++) {
        var item = clone[i];
        if (item != clone[i - 1] && clone[i + 1] != item)
            result.push(item);
    }
    return result;
}

/**
 * @author Deff
 **/
function test2() {
var obj ={};
var result = [];
    for (var i = 0; i < array.length; i++) {
        if(obj[array[i]]){
            delete obj[array[i]];
            continue;
        }
        obj[array[i]] = i;
    }
    for (var key in obj) {
        result[obj[key]] = key;
    }
    result = result.join(',').replace(/^,+/,'').replace(/,+$/,'').split(/,+/);

    return result;
}

/**
 * @author Дзен-трансгуманист (danik.js edition)
 **/
function test3(){
    var uniqueness = [];
    var result = [];
    for (var i = 0; i < array.length; i++) {
        var item = array[i];
        switch (uniqueness[item]) {
          case undefined:
              uniqueness[item] =  true;
              break;
          case true:
              uniqueness[item] = false;
        }
    }
 
    for (var i = 0; i < array.length; i++) {
        var item = array[i];
        if (uniqueness[item])
            result.push(item);
    }
    return result;
}

/**
 * @author Дзен-трансгуманист
 **/
function test4(){
  var uniqueness = new Map();
  var result = [];
 
  for ( var i = 0; i < array.length; i++ ) {
    var value = array[ i ];
    switch ( uniqueness.get( value )) {
      case undefined: uniqueness.set( value, true ); break;
      case true: uniqueness.set( value, false );
    }
  }
 
  for ( var i = 0; i < array.length; i++ ) {
      var item = array[ i ];
      if ( uniqueness.get( value ) )
        result.push( item );
  }
  return result;
}

console.time('рони');
for (var i = 0; i < 100; i++)
    test1();
console.timeEnd('рони')

console.time('Deff');
for (var i = 0; i < 100; i++)
    test2();
console.timeEnd('Deff')

console.time('Дзен-трансгуманист (danik.js edition)');
for (var i = 0; i < 100; i++)
    test3();
console.timeEnd('Дзен-трансгуманист (danik.js edition)')

console.time('Дзен-трансгуманист');
for (var i = 0; i < 100; i++)
    test4();
console.timeEnd('Дзен-трансгуманист')

})();


В хроме вариант с Map() на большом массиве медленней чем с []. В файрфоксе наоборот...
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 20.02.2014 в 01:19.
Ответить с цитированием