2017-11-19 21 views
1

Ich habe diesen Code, der gut für dieses Array funktioniert: ['45', '30', '50', '1'].Rückgabe der kleinstmögliche Join von Array Javascript

function penalty(a_list) { 
    return a_list.sort((a, b) => a - b).join(''); 
} 

zum Beispiel: Da a_list ist [ '45', '30', '50', '1'] der kleinste mögliche String '1304550' sein, was recht ist, aber was ist, wenn a_list ist [ '32', '3'] bei diesem aktuellen Code bekomme ich '332', was nicht korrekt ist, weil '323' die kleinste mögliche Zeichenkette ist. Ich hoffe, das hilft.

+0

So möchten Sie es das Array in einigen Fällen sortieren, aber nicht in anderen? Was sind die Sortierkriterien? – Andy

+0

gib eine Zeichenkette mit dem kleinsten Wert der kombinierten Zahlen in a_list zurück – Mohammed

+0

Meinst du, du willst den kleinstmöglichen int Wert raus? Weil ich denke, dass Sie nach dem ersten Zeichen des Array-Elements sortieren müssten, dann nach dem zweiten usw. – DBS

Antwort

5

Sie könnten die verkettet Werte von a und b und den Wert von b und a und nehmen Sie die Delta davon nehmen für die Sortierung, die für den späteren Beitritt für einen kleineren Wert der Sortierreihenfolge der beiden Zeichenfolge widerspiegelt.

Wenn Ganzzahlen angegeben werden, müssen die Werte im Sortierrückruf in eine Zeichenfolge konvertiert werden.

function sort(a, b) { 
 
    return (a + b) - (b + a); 
 
} 
 

 
console.log([['45', '30', '50', '1'], ['32', '3']].map(a => a.sort(sort).join('')));

Für eine stabile Art, könnte man kleinere Werte bewegen nach oben (was nicht die später trat String beeinflussen). Diese Sorte '3' vor '33'.

function sort(a, b) { 
 
    return (a + b) - (b + a) || a - b; 
 
} 
 

 
console.log([['45', '30', '50', '1'], ['32', '3']].map(a => a.sort(sort).join('')));

+0

Danke das hat funktioniert :) – Mohammed

+0

@Mohammed, beantwortet diese Antwort Ihre Frage? –

+0

ja es tat vielen Dank für Ihre Hilfe :) – Mohammed

Verwandte Themen