2016-07-25 5 views
0

에 배열에 문자열을 대체 나는 다음과 같은 배열이 있습니다는 찾기의 방법 개선 및 자바 스크립트

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

내가 새로운 문자열로 각각의 값을 대체 할을.

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

은 현재 내가 for 루프를 통해 통과하고 변경할 이름을 필요로하는 문자열이 존재하는 경우 그 다음 나는 새 값으로 교체하고 않을 경우, 확인 검사를하고 있습니다. for 루프가 작동하는 동안이 작업을 수행하는 데 더 좋은 방법이 있는지 궁금합니다.

답변

3

당신이 할 대체 가진 개체를 가정하면, 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] || valuevalue입니다.

은 어쨌든, 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'가 적어도 구현 한 방법에 대해 더 많은 실적을 보였습니다 (업데이트 된 답변 참조). – rpadovani

+0

아, 아마도 300 개 이상의 가능한 항목이 있지만 확장 성 측면에서는 그렇지 않습니다. 내가 for 루프에 충실 할 것을 제안 해 주시겠습니까? – lost9123193