2016-10-18 7 views
-1

Ich muss Zeichenfolgen in einem Array ersetzen. Im Moment bin ich mit einem forEach -loop und switch, was nicht sehr elegant fühlt:Ersetzen Sie Zeichenfolgen in einem Array

let result = []; 
source.forEach(el => { 
    switch (el) { 
     case 'replace': 
      result.push('with this'); break; 
     case ...: 
      ...; 
     default: 
      result.push(el); 
    } 
}); 
return result.join(','); 

Was ich will zu bekommen, ist ein Ersatz der Elemente durch eine andere Zeichenfolge oder mit der Original-Zeichenkette, wenn es ist keine Übereinstimmung.

Das Quell-Array hat 50 Elemente, das Ersatz-Array hat 30 Elemente.

Antwort

1

In Fällen, in denen Sie wünschen sich eine ein-in-one-out Manipulation eines Arrays, die .map Funktion bevorzugt:

return source.map(el => el === 'replace' ? 'with this' : el).join(','); 

EDIT Ich sehe, du hast die Frage aktualisiert und Sie tatsächlich haben 30 verschiedene Saiten, die du ersetzen möchtest. In diesem Fall sollten Sie ein Map verwenden, die mit der „vor“ und „nach“ Strings vorgefüllt wird:

let replaceFunc = (function() { 

    let replace = new Map([ 
     ['replace', 'with this'] 
    ]); 

    return source => source.map(el => replace.has(el) ? replace.get(el) : el).join(','); 
})(); 

Die IIFE wird verwendet, um sicherzustellen, eine einmalige Initialisierung der Map, und die zurückgegebene Funktion, ist geschlossen über die Map ist replaceFunc zugeordnet.

> replaceFunc(['replace']); 
"with this" 
+0

Der 'neue Map()' Teil funktioniert nicht für mich. Aber ich verstehe nicht warum. Ich bekomme keinen Fehler, aber ich bekomme auch keine Ausgabe. Benötigt 'replace.get (el)' keinen Index? – user3142695

+0

Es funktioniert für mich auf Chrome 54 (ich nehme an, Sie verwenden einen modernen Browser oder Interpreter, wenn Sie die ES6-Pfeilsyntax in der Frage verwendet haben). Der Parameter für 'replace.get()' ist nur der Schlüssel, also in diesem Fall ein Wort aus dem Quell-Array. – Alnitak

1

map ist eine Alternative

var result = source.map(function (e) { 
    return e === 'replace' ? 'with this' : e; 
}); 
1

var sample = ["aaa", "bbb", "replaceMe", "ccc", "ddd"]; 
 
var result = sample.map(function(ele, inx) { 
 
    if (ele == "replaceMe") { 
 
     return "newText"; 
 
    } else { 
 
     return ele; 
 
    } 
 
}); 
 
console.log(result);

Verwandte Themen