2016-07-25 2 views
0

Ich habe folgende Array:Methode zu finden Verbesserte und Strings in Javascript in einem Array ersetzt

["cat", "dog", "cow"] 

Ich möchte die Werte der jeweils durch eine neue Zeichenfolge ersetzen.

["tiger", "wolf", "diary"] 

Zeit durch eine for-Schleife Ich bin durchlaufen, und wenn eine Zeichenfolge, um zu sehen prüfe, der seinen Namen existiert geändert werden muss, wenn es mir ersetzt werde es mit dem neuen Wert hat dann. Während eine For-Schleife funktioniert, frage ich mich, ob es eine schönere Methode dafür gibt.

Antwort

3

Angenommen, Sie haben ein Objekt mit dem zu tun, zu ersetzen, können Sie Array.map

var replace = { 
 
    'cat': 'tiger', 
 
    'dog': 'wolf', 
 
    'cow': 'diary', 
 
}; 
 

 
var starter = ["cat", "dog", "cow"]; 
 

 
var final = starter.map(value => replace[value] || value); 
 
    
 
console.log(final)

verwenden Wenn die Zeichenfolge nicht in der replace Objekt replace[value] ist undefined, also replace[value] || value wird value selbst ausgewertet.

Auf jeden Fall ist die for definitiv leistungsfähigere, zumindest auf node.js, entsprechend benchmark.js:

Array.map x 2,818,799 ops/sec ±1.90% (76 runs sampled) 
for array x 9,549,635 ops/sec ±1.86% (79 runs sampled) 
Fastest is for array 

Hier ist der Code, den ich für den Test

verwendet
var Benchmark = require('benchmark'); 
var suite = new Benchmark.Suite; 

suite 
.add('Array.map', function() { 
    var replace = { 
    'cat': 'tiger', 
    'dog': 'wolf', 
    'cow': 'diary', 
    }; 

    var starter = ["cat", "dog", "cow"]; 

    var final = starter.map(value => replace[value] || value); 
}) 
.add('for array', function() { 
    var replace = { 
    'cat': 'tiger', 
    'dog': 'wolf', 
    'cow': 'diary', 
    }; 

    var starter = ["cat", "dog", "cow"]; 

    var final = []; 

    for (var i = 0; i < starter.length; i++) { 
    final.push(replace[starter[i]] || starter[i]); 
    } 
}) 
// add listeners 
.on('cycle', function(event) { 
    console.log(String(event.target)); 
}) 
.on('complete', function() { 
    console.log('Fastest is ' + this.filter('fastest').map('name')); 
}) 
// run async 
.run({ 'async': true }); 
+0

Sehr ordentlich, Vielen Dank! – lost9123193

+0

@ lost9123193 Ich habe einige Versuche, und die 'für' ist mehr Leistung (siehe die aktualisierte Antwort) zumindest auf, wie ich es implementiert – rpadovani

+0

ah Ich sehe, werde ich wahrscheinlich nicht mehr als 300 mögliche Einträge, aber in Bezug auf Skalierbarkeit Würdest du vorschlagen, ich bleibe bei der for-Schleife? – lost9123193

Verwandte Themen