7

是否有一种简单的方法可以将数组中基元的所有外观替换为另一个。所以['a', 'b', 'a', 'c']['x', 'b', 'x', 'c']替换ax. 我知道这可以通过 map 函数来完成,但我想知道是否忽略了一种更简单的方法。

4

4 回答 4

11

在您的示例具有字符串的特定情况下,您可以通过以下方式本地执行:

myArr.join(",").replace(/a/g,"x").split(",");

其中“,”是一些未出现在数组中的字符串。

也就是说,我没有看到问题_.map- 这听起来像是更好的方法,因为这实际上就是你正在做的事情。您正在将数组映射到自身并替换值。

_.map(myArr,function(el){
     return (el==='a') ? 'x' : el;
})
于 2013-11-08T13:21:41.580 回答
3

I don't know about "simpler", but you can make it reusable

function swap(ref, replacement, input) {
    return (ref === input) ? replacement : input;
}

var a = ['a', 'b', 'a', 'c'];

_.map(a, _.partial(swap, 'a', 'x'));
于 2013-11-08T15:08:58.683 回答
3

如果数组包含可变对象,使用 lodash 的 find 函数很简单。

  var arr = [{'a':'a'}, {'b':'b'},{'a':'a'},{'c':'c'}];    

  while(_.find(arr, {'a':'a'})){
    (_.find(arr, {'a':'a'})).a = 'x';
  }


console.log(arr); // [{'a':'x'}, {'b':'b'},{'a':'x'},{'c':'c'}]
于 2016-06-08T17:23:47.803 回答
1

另一个简单的解决方案。适用于字符串数组,替换所有出现的地方,读起来很好。

var arr1 = ['a', 'b', 'a', 'c'];
var arr2 = _.map(arr1, _.partial(_.replace, _, 'a', 'd'));
console.log(arr2); // ["d", "b", "d", "c"]
于 2018-09-03T20:48:13.727 回答