在陣列替換字符串我有以下陣列:尋找改進方法和在Javascript
["cat", "dog", "cow"]
我想用一個新的字符串替換每個值。
["tiger", "wolf", "diary"]
目前我通過遍歷for循環和檢查,看看是否需要它的名字要改變一個字符串存在,如果它不那麼我用新值替換它。雖然for循環的作品,我想知道是否有更好的方式做到這一點。
在陣列替換字符串我有以下陣列:尋找改進方法和在Javascript
["cat", "dog", "cow"]
我想用一個新的字符串替換每個值。
["tiger", "wolf", "diary"]
目前我通過遍歷for循環和檢查,看看是否需要它的名字要改變一個字符串存在,如果它不那麼我用新值替換它。雖然for循環的作品,我想知道是否有更好的方式做到這一點。
假設你有替換做一個對象,你可以使用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
對象,replace[value]
爲undefined
,因此replace[value] || value
評估爲value
本身。
反正for
肯定更高性能,至少在node.js的,因此到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
在這裏,我用於測試
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 });
function transform(str){
//logic to transform goes here
}
var massaged = myArr.map(transform);
也許這就是你要求的?
地圖參考這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
非常整潔的代碼,謝謝! – lost9123193
@ lost9123193我做了一些嘗試,並且'for'的性能更好(請參閱更新後的答案),至少在我如何實現它 – rpadovani
啊我看,我可能不會有超過300個可能的條目,但是在可伸縮性你會建議我堅持for循環嗎? – lost9123193