2016-07-05 16 views
0

Ich versuche, Strings in einem Array in Abhängigkeit von der Anzahl in ihnen, dh. 'h2ello f3ere b1ow' sollte ein Array von ['blow', 'h2ello', 'f3ere'] zurückgeben. Der folgende Code arbeitet mit zwei Elementen (h2ello und b1ow), aber nicht, wenn ich ein drittes hinzufüge. Hat jemand eine Idee, warum das so ist?Reihenfolge der Strings in einem Array nach Anzahl in String

function order(words){ 
    var sentence = []; 
    words = words.split(" "); 
for (var i=0;i<words.length;i++){ 
    for (var m=0;m<words[i].length;m++){ 
    if (!isNaN(parseFloat(words[i][m])) && isFinite(words[i][m])){ 
    var idx = words[i][m]; 
     sentence.splice(idx, 0, words[i]); 
    } 
    } 
} 
console.log(sentence); 
} 

order('h2ello f3ere b1ow'); 

Antwort

0

Wenn Sie Dokumentation auf Spleiß überprüfen: Array splice Sie werden sehen, dass wenn der Index mehr als die Länge des Arrays ist, wird es auf die Länge des Arrays eingestellt werden. Es macht also nur einen Push, anstatt auf den gewünschten Index zu setzen. Eine Lösung könnte es manuell einstellen:

sentence[idx-1] = words[i] 

Je nach Bedarf Sie auch Ihre Funktion einiges vereinfachen könnte:

function order(words){ 
    words = words.split(" ").sort(function(a,b){ 
    return a.match(/\d/) - b.match(/\d/) // get first digit and compare them 
    }) 
console.log(words); 
} 
2

Am einfachsten wäre die direkte Art der Anordnung sein, ohne Spleißen ein Ort, wo die anderen Orte unbekannt sind (in der Schleife).

Dieser Vorschlag verwendet Array#sort mit einem Callback, der nach einer Dezimalzahl sucht, nach der sortiert werden soll.

var array = 'h2ello f3ere b1ow'.split(' '); 
 

 
array.sort(function (a, b) { 
 
    return a.match(/\d+/) - b.match(/\d+/); 
 
}); 
 

 
console.log(array);

0

Ich weiß nicht, was eine bessere Leistung hat. Übrigens hat meine Mine einen Vergleich weniger Regex pro Vergleich.

var sorted = 'h2ello f3ere b1ow'.split(' ') 
 
    .map(w => ({ key: w.match(/\d+/)[0], word: w })) 
 
    .sort((a, b) => a.key - b.key) 
 
    .map(o => o.word).join(' '); 
 

 
console.log(sorted);

Verwandte Themen