2016-07-08 5 views
2

Ich muss eine Zeichenfolge mit Namen in eine Zeichenfolge mit Namen und Initialen durch Komma getrennt verwandeln.Transform String mit optionalen vollständigen Namen zu Namen und Initiale

Beispiel

Any-Name Tom, Name Brian Joe, Smith Judie, et al. 
Any-Name T., Name Brian J., Smith J., et al. 
Any-Name T, Name B J, Smith J, et al. 
Any-Name Tom,Name Brian Joe,Smith Judie, et al. 

... alle sollten

Any-Name T, Name BJ, Smith J, et al. 

Die et al. ist optional bekommen. So ...

Any-Name Tom, Name Brian Joe, Smith Judie 

... sollte erhalten

Any-Name T, Name BJ, Smith J 

Ich habe versucht, es auf diese Weise zu tun:

var names = string.split(","); 
names.forEach(function(name) { 
    name = name.trim(); 
    var parts = name.split(" "); 
    parts.forEach(function(part, index) { 
     if (index > 0) { 
      var initial = part.slice(0,1); 
      // get upper case 
     } 
    }); 
}); 

Aber das scheint ein bisschen zu kompliziert zu sein ..

Antwort

2

Sie waren fast fertig.

Dieser Vorschlag verwendet Array#reduce für die Verbindung der Teile des Namens und wendet die gewünschte Initiale in Großbuchstaben an.

Die 'et al' könnte bei Bedarf mit einer Großbuchstabenfolge versehen werden. Wenn man es gefunden hat, wird es später zum Ergebnis hinzugefügt.

function reName(string) { 
 
    var names = string.split(","), 
 
     etal = names[names.length - 1].indexOf('et al') !== -1 ? names.pop().trim() : '', 
 
     condensed = names.map(function (name) { 
 
      return name.trim().split(" ").reduce(function (r, part, index) { 
 
       return index ? r + part[0].toUpperCase() : part + ' '; 
 
      }, ''); 
 
     }); 
 

 
    etal && condensed.push(etal); 
 
    return condensed.join(', '); 
 
} 
 

 
console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie')); 
 
console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie, et al.'));

1

Diese Lösung, die OP ist nicht vereinfachen nicht, aber es ergänzt sie durch eine neue Zeichenfolge namens newNames das Erstellen und die Bestandteile (Vornamen und Initialen & et al) schriftlich an sie.

var str="Any-Name Tom, Name Brian Joe, Smith Judie"; 
 
var names = str.split(","); 
 
var newNames = ""; 
 
names.forEach(function(name) { 
 
    var neatName; 
 
    name = name.trim(); 
 
    var parts = name.split(" "); 
 
    parts.forEach(function(part, index) { 
 
    if (index === 0) neatName = part + " "; 
 
    if (index > 0) { 
 
     var initial = part.slice(0, 1); 
 
     neatName += initial; 
 
    } 
 
    }); 
 
    newNames+=neatName + ", "; 
 
}); 
 
newNames+="et al."; 
 
document.write(newNames)

Verwandte Themen