Javascript 使用lodash在阵列中替换

Javascript 使用lodash在阵列中替换,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,有没有一种简单的方法可以用另一个基元替换数组中基元的所有外观。因此,当用x替换a时,['a',b','a','c']将成为['x','b','x','c']。我知道这可以通过map函数实现,但我想知道您是否忽略了一种更简单的方法。在您的示例中的字符串的特定情况下,您可以通过以下方式实现: myArr.join(",").replace(/a/g,"x").split(","); 其中,“”是数组中未出现的字符串 也就是说,我看不出..map有什么问题-这听起来是更好的方法,因为事实上这就是您正

有没有一种简单的方法可以用另一个基元替换数组中基元的所有外观。因此,当用
x
替换
a
时,
['a',b','a','c']
将成为
['x','b','x','c']
。我知道这可以通过map函数实现,但我想知道您是否忽略了一种更简单的方法。

在您的示例中的字符串的特定情况下,您可以通过以下方式实现:

myArr.join(",").replace(/a/g,"x").split(",");
其中,“”是数组中未出现的字符串

也就是说,我看不出
..map
有什么问题-这听起来是更好的方法,因为事实上这就是您正在做的。您正在使用替换的值将数组映射到自身

_.map(myArr,function(el){
     return (el==='a') ? 'x' : el;
})
我不知道“更简单”,但你可以让它重复使用

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

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

_.map(a, _.partial(swap, 'a', 'x'));

如果数组包含可变对象,则它是一个直接的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'}]

另一个简单的解决方案。可以很好地处理字符串数组,替换所有出现的字符串,读取效果良好

var arr1 = ['a', 'b', 'a', 'c'];
var arr2 = _.map(arr1, _.partial(_.replace, _, 'a', 'd'));
console.log(arr2); // ["d", "b", "d", "c"]

问题是关于原语而不仅仅是字符串。我还想使用lodash,因为这将是一个较长链中的一步,在这个链中,数组数据被操作。@AndreasKöberle首先使用一个特定的库是一种手段,而不是目标。其次-在这种情况下,
。.map
就是您要寻找的,下划线/lodash在集合上没有特定的替换/交换功能,如果您愿意,您可以自己将其添加到lodash原型中。u.map非常适合此用例,我认为像Lo Dash这样的库的目的不是让您能够编写尽可能多的代码golfy解决方案,而是编写最自然、最惯用的解决方案。在这种情况下,还有什么比
map()
更自然、更地道的呢?这是完成这项工作的完美工具。@Tomalak
(array).filter('someKey').replace('a','x')
对我来说看起来很自然,但这不符合逻辑-我希望使用名为“filter”的操作来减少输入中的元素数量。另外:这与外表无关。这是关于您要对数据执行的操作,对我来说,这是“映射N个值的列表和N个值的列表(其中一些值碰巧与输入相同)”。使用Lodash中的findIndex,然后替换找到的索引处的元素