在Javascript中查找和替换数组中字符串的改进方法

时间:2016-07-25 22:54:35

标签: javascript arrays string

我有以下数组:

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

我想用新字符串替换每个值。

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

目前我正在遍历for循环并检查是否存在需要更改其名称的字符串,如果存在,那么我将使用新值替换它。虽然for循环有效,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分: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对象中,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 });

答案 1 :(得分:1)

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