Сообщение от 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() на большом массиве медленней чем с []. В файрфоксе наоборот...