2016-09-29 4 views
0

Ich habe ein Objekt mit mehreren Attributen, die ich in einer Zeichenfolge ersetzen möchte.Ersetzen in String mit lodash

replaceBy:{ 
      "PRS_JOBS_MAQUINA":"PRS_JOBS_WORKCENTER", 
      "CD_MAQ":"CD_WKC", 
      "DT_INI_MAQ":"DT_INI_WKC", 
      "DT_INI_JM" :"DT_INI_JW" 
      } 

Gibt es einen beredten Weg, dies mit lodash zu tun? Hier ist die Zeichenfolge

" 

AND (CD_JOB, DT_INI_JOB) IN (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ' 
AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01' AND x.DT_FIM IS NULL) 

"

+0

Was haben Sie versucht? – Slavik

+0

Warum eine Bibliothek verwenden? 'für (var rb in replaceBy) str = str.replace (neue RegExp (rb," g "), replaceBy [rb]);' – mplungjan

+0

pure javascript: http://es6fiddle.net/itoeawvc/ (ersetzt nur das erste Vorkommen von jedem Schlüssel) –

Antwort

2

Lösung:

var yourString = 'your string'; 
_.forEach(replaceBy, function(value, key) { 
    yourString = _.replace(string, key, value); 
}); 
+0

Während dies die Frage beantworten kann, bietet es keinen Kontext, um zu erklären, wie oder warum. Erwägen Sie, ein oder zwei Sätze hinzuzufügen, um Ihre Antwort zu erklären. – brandonscript

0

Warum eine Bibliothek verwenden

var replaceBy={ 
 
       "PRS_JOBS_MAQUINA":"PRS_JOBS_WORKCENTER", 
 
       "CD_MAQ":"CD_WKC", 
 
       "DT_INI_MAQ":"DT_INI_WKC", 
 
       "DT_INI_JM" :"DT_INI_JW" 
 
       }, str= "AND (CD_JOB, DT_INI_JOB) IN (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ' AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01' AND x.DT_FIM IS NULL)" 
 

 
for (var rb in replaceBy) { 
 
    str = str.replace(new RegExp(rb, "g"),replaceBy[rb]); 
 
} 
 
console.log(str)

1

Sie können String.prototype.replace() mit einem regulären Ausdruck verwenden, die alle Suchwörter enthalten, und ersetzen Sie sie replace Rückruf verwenden:

function replaceByMap(str, replaceBy) { 
 
    var search = new RegExp(Object.keys(replaceBy).join('|'), 'g'); // creates a regexp of the strings to replace 
 

 
    return str.replace(search, function(match) { // iterates the string, and replace the strings found with their replacements from the map 
 
    return replaceBy[match]; 
 
    }); 
 
} 
 

 
var replaceBy = { 
 
    "PRS_JOBS_MAQUINA": "PRS_JOBS_WORKCENTER", 
 
    "CD_MAQ": "CD_WKC", 
 
    "DT_INI_MAQ": "DT_INI_WKC", 
 
    "DT_INI_JM": "DT_INI_JW" 
 
}; 
 

 
var str = "AND (CD_JOB, DT_INI_JOB) IN (SELECT x.CD_JOB, x.DT_INI_JM FROM PRS_JOBS_MAQUINA x WHERE x.EMPRESA = ':EMPRESA' AND x.CD_MAQ = ':CD_MAQ' AND TO_CHAR(x.DT_INI_MAQ, 'YYYY-MM-DD') = ':DT_INI_MAQ' AND TO_CHAR(x.DT_INI_JM, 'YYYY-MM-DD') = '1900-01-01' AND x.DT_FIM IS NULL)"; 
 

 
var result = replaceByMap(str, replaceBy); 
 
console.log(result);