Сообщение от Deff
|
создадим тест сравнения
|
Ну что ж, давай!
/**
* @author danik.js
**/
function test1() {
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var result = [];
for (var i = 0; i < array.length; i++) {
var item = array[i];
if (array.indexOf(item, i + 1) === -1 && (i === 0 || array.lastIndexOf(item, i - 1) === -1))
result.push(item);
}
return result;
}
/**
* @author Deff
**/
function test2() {
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var bound = ',';
var tststr = bound + array.join(bound+bound) + bound;
var result = [];
for (var i = 0; i < array.length; i++) {
var item = array[i];
var t = bound +item + bound;
if (tststr.indexOf(t) === tststr.lastIndexOf(t))
result.push(item);
}
return result;
}
/**
* @author рони
**/
function test3() {
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var result = [];
array.sort(function (a, b) {
return a - b;
});
for (var i = 0; i < array.length; i++) {
var item = array[i];
if (item != array[i - 1] && array[i + 1] != item)
result.push(item);
}
return result;
}
/**
* @author Дзен-трансгуманист (danik.js edition)
**/
function test4(){
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
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 BallsShaped
**/
function test6(){
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var result = [];
for (var i = 0; i < array.length; i++) {
var item = array[i];
if (array.indexOf(item) == array.lastIndexOf(item))
result.push(item);
}
return result;
}
/**
* @author Дзен-трансгуманист
**/
function test5(){
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
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 ); return;
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('danik.js');
for (var i = 0; i < 1000000; i++)
test1();
console.timeEnd('danik.js')
console.time('Deff');
for (var i = 0; i < 1000000; i++)
test2();
console.timeEnd('Deff')
console.time('рони');
for (var i = 0; i < 1000000; i++)
test3();
console.timeEnd('рони')
console.time('Дзен-трансгуманист (danik.js edition)');
for (var i = 0; i < 1000000; i++)
test4();
console.timeEnd('Дзен-трансгуманист (danik.js edition)')
console.time('BallsShaped');
for (var i = 0; i < 1000000; i++)
test6();
console.timeEnd('BallsShaped')
console.time('Дзен-трансгуманист');
for (var i = 0; i < 1000000; i++)
test5();
console.timeEnd('Дзен-трансгуманист')
Мои результаты в хроме:
Код:
|
danik.js: 725.000ms
Deff: 5175.000ms
рони: 1448.000ms |
Хорошо бы конечно генерить рандомные массивы разного размера, но как-то лень мне...
Думаю на больших массивах вариант
рони окажется быстрей.