Remplacer dans le tableau en utilisant lodash

Est-il un moyen facile de remplacer toutes les apparences d'une primitive dans un tableau à un autre. De sorte que ['a', 'b', 'a', 'c'] deviendrait ['x', 'b', 'x', 'c'] en remplaçant a par x . Je suis conscient que cela peut être fait avec une fonction de carte, mais je me demande si ont négligé une manière plus simple.

5
demandé sur Andreas Köberle 2013-11-08 17:17:14

4 réponses

dans le spécifique cas de cordes votre exemple a, vous pouvez le faire nativement avec:

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

Où "," est une chaîne de caractères qui n'apparaissent pas dans le tableau.

cela dit, Je ne vois pas le problème avec un _.map - cela ressemble à la meilleure approche puisque c'est en fait ce que vous faites. Vous faites le mappage du tableau à lui-même avec la valeur remplacée.

_.map(myArr,function(el){
     return (el==='a') ? 'x' : el;
})
10
répondu Benjamin Gruenbaum 2017-01-11 21:12:10

je ne sais pas "simple", mais vous pouvez le rendre réutilisable

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

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

_.map(a, _.partial(swap, 'a', 'x'));
3
répondu Tomalak 2013-11-08 15:08:58

si le tableau contient des objets mutables, C'est un simple en avant avec la fonction 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'}]
3
répondu j1s 2016-06-08 17:35:42

une autre solution simple. Fonctionne bien avec des tableaux de cordes, remplace toutes les occurrences, lit bien.

var arr1 = ['a', 'b', 'a', 'c'];
var arr2 = _.map(arr1, _.partial(_.replace, _, 'a', 'd'));
console.log(arr2); // ["d", "b", "d", "c"]
0
répondu Ihor 2018-09-03 20:48:13