2016-05-02 5 views
0

Ich habe diesen Code hier:subtrahieren und erhalten eine saubere Zahl von der Gesamtlänge des Arrays [Javascript]

function likes(names) { 
    if (names.length == 0) { 
    return 'no one likes this'; 
} else if (names.length >= 4) { 
    return names[0]+ ', ' + names[1] + ' and' + names.length - 2 + 'others like this'; 
} else if (names.length <4 && names.length >0){ 
return names[0] + ', ' + names[1] +' and ' + names[2] +' like this' 
}} 

Mein Hauptproblem ist in Zeile 5 I 2 von der Länge der subtrahieren müssen Array und concat das zur Zeichenfolge. Unglücklicherweise für mich habe ich keine Ahnung, wie das gemacht werden kann, und meins ist offensichtlich falsch. Danke im Voraus.

Antwort

1

Sie haben die numerische subexpression in Klammern einzuschließen, damit er nicht Teil des größeren String-Verkettung Prozess zu sein:

return names[0]+ ', ' + names[1] + ' and ' + (names.length - 2) + ' others like this'; 

Damit wird die numerische Subtraktion subexpression getrennt ausgewertet werden, und das Ergebnis davon wird in die Zeichenfolge verkettet werden.

+1

Zusätzlich in 'else if (names.length <4 && names.length> 0)' '&& names.length> 0 ' ist überflüssig. Sie haben es eingecheckt 'if (names.length == 0)' –

+0

Es ist auch eine gute Idee, Bedingungen neu anzuordnen. 1) '== 0', 2)' <4' und 3) 'else', was'> = 4' bedeutet –

+0

@AlexKudryashev Sicher, das stimmt. Ich habe gerade das unmittelbare Problem angesprochen. – Pointy

1

Alternativ zu Pointy's answer sind Template Strings cleaner meiner Meinung nach:

return `${names[0]}, ${names[1]} and ${names.length - 2} others like this`; 
+0

Sie könnten sauberer sein (obwohl ich in einfachen Fällen nicht 100% überzeugt bin), aber soweit ich weiß, werden sie in keiner IE-Version (einschließlich Edge) unterstützt. – Pointy

+0

Eigentlich sieht es aus wie [Edge-Unterstützung] (http://kangax.github.io/compat-table/es6/#test-template_strings) für Vorlagenliterale ist ziemlich gut. IE11 fehlt jedoch vollständig Unterstützung. – timolawl

+0

@timolawl Oh OK. Die MDN-Seite ist dann falsch. – Pointy