是否有一种简单的方法可以将数组中基元的所有外观替换为另一个基元。因此,['a', 'b', 'a', 'c']
在['x', 'b', 'x', 'c']
替换a
时会变为x
。我知道这可以通过map函数完成,但我想知道是否忽略了一种更简单的方法。
答案 0 :(得分:10)
在您的示例所使用的字符串的特定情况下,您可以使用以下内容进行本地操作:
myArr.join(",").replace(/a/g,"x").split(",");
其中“,”是一些未出现在数组中的字符串。
那就是说,我没有看到_.map
的问题 - 听起来这是更好的方法,因为这实际上就是你正在做的事情。您将数组映射到自身并替换了值。
_.map(myArr,function(el){
return (el==='a') ? 'x' : el;
})
答案 1 :(得分:3)
我不知道"更简单",但你可以让它重复使用
function swap(ref, replacement, input) {
return (ref === input) ? replacement : input;
}
var a = ['a', 'b', 'a', 'c'];
_.map(a, _.partial(swap, 'a', 'x'));
答案 2 :(得分:3)
如果数组包含可变对象,则可以直接使用lodash查找函数。
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'}]
答案 3 :(得分:1)
另一个简单的解决方案。与字符串数组配合使用,可以替换所有出现的内容,并且读取效果很好。
var arr1 = ['a', 'b', 'a', 'c'];
var arr2 = _.map(arr1, _.partial(_.replace, _, 'a', 'd'));
console.log(arr2); // ["d", "b", "d", "c"]