2016-07-25 4 views
0

のArray内の文字列を置き換えます。は、私は次の配列を持って求める方法の改善とJavascript

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

現在、私は、forループを横断して変更することがその名を必要とする文字列が存在する場合、それは、私は新しい値に置き換えるいない場合は、確認するためにチェックしています。 forループは動作しますが、これを行うにはより良い方法があるのだろうかと思います。

答えて

3

文字列がreplaceオブジェクトにない場合は、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)

を使用することができますreplace[value]undefinedなので、replace[value] || valueは評価valueです。

はとにかく、forはそれに応じてbenchmark.jsに、少なくともNode.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 

私は

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

非常にきちんとしたテストのために使用されるコード、ありがとう! – lost9123193

+0

@ lost9123193私はいくつか試してみましたが、少なくともforを実装した方法では、 'for'はよりパフォーマンスが良いです(更新された答えを見てください) – rpadovani

+0

ああ、おそらく300を超えるエントリーはありませんが、スケーラビリティ私はforループに固執するとお勧めしますか? – lost9123193

関連する問題