Struppi: Herausfinden ob ein Wert im Array vorhanden ist

Beitrag lesen

Das ist aber umständlich. Das dürfte mit einem Objekt schneller erledigt sein.

Auch in einem Objekt braucht es einen Loop über alle Werte - oder?
Was schliesslich schneller ist, hängt vom praktischen Einsatzgebiet ab.

Ich meinte schon den Aufbau des Arrays, da hast du zwei Schleifen gebraucht und splice().
Das geht einfacher mit

var string = '  .....  ';
var tmp = string.split(" ");
var words = {};
for(var i = 0; i <tmp.length; i++) words[tmp[i]] = true;

und jetzt kann man prüfen ob ein Wort vorhanden ist:
if( words[word] ) ....

ohne Schleife.

Ein Benchmark (auf einem 1GHz Rechner):

Array.prototype.hasValue = function(val)  
{  
    for(var i = 0; i < this.length; i++) if( val == this[i]) return true;  
    return false;  
}  
  
var string = "Ein Satz mit vielen Worten, die auch durchaus doppelt vorkommen können, Ein Satz mit vielen Worten, die auch durchaus doppelt vorkommen können, Ein Satz mit vielen Worten, die auch durchaus doppelt vorkommen können";  
  
var words_o = make_obj( string);  
var words_a = make_arr( string);  
  
function make_arr(s)  
{  
string = string.replace( /[,;.!?]/g, ' '); // wegen dem ö  
string = string.replace( / {2,}/g, ' ');  
var tmp = string.split(" ");  
var obj = {};  
for(var i = 0; i <tmp.length; i++) obj[tmp[i]] = true;  
tmp = [];  
for( var w in obj) tmp.push( w);  
return tmp;  
}  
  
function make_obj(s)  
{  
string = string.replace( /[,;.!?]/g, ' ');  
string = string.replace( / {2,}/g, ' ');  
var tmp = string.split(" ");  
var obj = {};  
for(var i = 0; i <tmp.length; i++) obj[tmp[i]] = true;  
return obj;  
}  
  
var count = 5000;  
  
var d1 = new Date();  
for(var i = 0; i < count; i++)  
{  
var x = words_a.hasValue('die')  
var y = words_a.hasValue('do')  
}  
var d2 = new Date();  
alert('Array: ' + (d2 - d1 ) );  
  
d1 = new Date();  
for(var i = 0; i < count; i++)  
{  
var x = words_o['die']  
var y = words_o['do']  
}  
d2 = new Date();  
alert('Objekt: ' + (d2 - d1 ) );  

ergibt im Firefox, dass die Array ein bisschen schneller ist, im IE(7) kann die array Methode nicht ansatzweise vom Tempo mithalten. Mehr Browser hab ich grad nicht.

Struppi.

--
Javascript ist toll (Perl auch!)