2017-07-12 2 views
1

Ich habe Problem, das ich die Länge meines Modells bekommen wollen, ist aber immer gleich 2Zählen Sie nicht den Nullwert in array.lenght

Wenn ich meine Anzeige modelFriend.lenght Ich habe dies: [Thu Jul 06 2017 00:00:00 GMT+0200,null]

und null ist wie ein Wert betrachten, so dass die length gleich 2 ist

Wie kann reale Größe zählen, die modelFriend.lenght = 1 ist, wenn ich ein Datum wählen und modelFriend.lenght = 2 wenn ich 2 Datum wählen

Dies ist mein Code:

public selectDate = (date) => { 
    if (this.mode === 'period') { 
    const dates = this._modelFriend ? [this._modelFriend[0], this._modelFriend[1]] : [null, null] 

    if (!dates[0] || dates[1]) { 
     dates[0] = date 
     dates[1] = null 
    } else { 
     dates[1] = date 
    } 
    this._modelFriend = dates 
    if (this._modelFriend.length === 2) { 

     this.model = dates 

    } 
+0

Also wäre es nicht richtig, zuerst die 'Null'-Werte zu vermeiden? Der derzeitige Ansatz scheint mir ein bisschen falsch zu sein. –

+0

ok was ist deine Lösung, weil es für Validierungstest wenn der Benutzer nur ein Datum eingeben ist falsch, so dass ng-ungültig, aber wenn er einen Zeitraum, der ng-gültig ist so gewählt, dass ich meine Array-Länge testen möchte ist egal zu 2 Wie würden Sie fortfahren? – ouanounou

Antwort

1

Diese Funktion unten verwenden, die filter verwendet, um die Nicht-Null-Elemente aus dem Array zu zählen:

function countNonEmpty(array) { 
 
    return array.filter(Boolean).length; 
 
} 
 

 
var array = [new Date(), null]; 
 
console.log(countNonEmpty(array));

+0

danke zu antworten, aber wie kann man das in meinem Code verwenden Ich weiß jetzt nicht, wie das implementiert werden kann Entschuldigung ich bin Anfänger ... – ouanounou

+0

Sie können einfach ersetzen die 'this._modelFriend.length === 2' zu 'countNonEmpty (this._modelFriend) === 2' –

+0

Oder, wenn Sie diese Funktion (countNonEmpty) nicht erstellen möchten, können Sie dies direkt verwenden:' this._modelFriend.filter (Boolean) .length === 2 ' –

0

I gehe davon aus, dass das Array in deinem Fall immer die Länge 2 hat. Deshalb würde ich einfach überprüfen, ob this._modelFriend[0]!=null && this._modelFriend[1]!=null, statt filtern und überprüfen Sie die Länge des neuen gefilterten Array. Wenn der Ausdruck true ergibt, haben Sie 2 Daten.

Alles andere ist kompliziert, schwieriger zu lesen und ein Overhead.

+0

das Ergebnis ist das gleiche, wenn ich this._modelFriend.filter (Boolean) .length === 2 oder wenn ich dies evaluieren ._modelFriend [0]! = Null && this. _modelFriend [1]! = null Das Ergebnis ist wahr oder falsch? – ouanounou

+0

Ja, es ist das gleiche. Der Ansatz mit dem Filter macht Sinn, wenn das fragliche Array dynamisch in der Länge wäre. Da es immer die Länge von 2 haben wird, ist es definitiv ein Overhead. –

+0

ok ich verstehe danke für ihren rat ich werde es folgen – ouanounou