2016-06-23 12 views
1

Dies ist speziell für JavaScript.Mehrere Ersetzungen mit vordefinierten Indizes

Sagen, ich habe einen String, "cat dog cat" und muß beiden Zeichen in "1 2 1" 0-2 und 8-10 mit "1" und Figuren 4-6 mit "2", was ersetzen.

ich nur kenne die Bereiche von dem, was ich ersetzen müssen - ich weiß nicht, ihren Inhalt

Ich weiß, was ich mit jedem Bereich zu ersetzen, und ich weiß, dass die Bereiche mit zu beginnen, aber wenn Ich ersetze den ersten Bereich, die Positionen von allem anderen haben sich verschoben, was bedeutet, dass jeder weitere Ersatz die falschen Indizes beeinflussen würde.

Wie würde ich diesen Austausch korrekt durchführen?

Antwort

1

Sie könnten Array#reduce verwenden und über alle Zeichen iterieren und entscheiden, ob das Zeichen ersetzt, gelöscht oder verwendet wird.

var string ="cat dog cat", 
 
    replace = [{ value: '1', from: 0, to: 2 }, { value: '1', from: 8, to: 10 }, { value: '2', from: 4, to: 6 }], 
 
    result = string.split('').reduce(function (r, a, i) { 
 
     return replace.some(function (b) { 
 
      if (i >= b.from && i <= b.to) { 
 
       if (i === b.from) { 
 
        r += b.value; 
 
       } 
 
       return true; 
 
      } 
 
     }) ? r : r + a; 
 
    }, ''); 
 

 
console.log(result);

0

Verwenden temporärer "stubs" (null Werte), um die Ausgangspositionen zu erhalten und die notwendigen Einfügungen Verwendung Array.splice Funktion machen:

var str = "cat dog cat", chars = str.split(""), 
    // predefined ranges (v - replacing value, r - range of positions) 
    ranges = [{v: 1, r: [0,2]}, {v: 2, r: [4,6]}, {v: 1, r: [8,10]}]; 

ranges.forEach(function(o){ 
    chars.splice(o.r[0], (o.r[1] - o.r[0]) + 1); // removing elements starting from specified index 
    chars.splice(o.r[0], 0, o.v, null, null); // filling with stubs 
}); 
chars = chars.filter(function(v){ return v !== null; }).join(""); 

console.log(chars); // "1 2 1" 
Verwandte Themen