2017-06-06 1 views
0

Das ist mein Problem: Ich konnte dieses Array von Objekten haben:Überprüfen Sie, ob Wert in Objekt null oder leer Javascript ist

[{ 
    "name": "Alex", 
    "code": "05422180283", 
    "pIva": "05422180283", 
    "subCode": null 
}, { 
    "name": "John", 
    "code": null, 
    "pIva": null, 
    "subCode": "IT" 
}, { 
    "name": "Billy", 
    "code": null, 
    "pIva": null, 
    "subCode": "IT" 
}, { 
    "name": "Tom", 
    "code": null, 
    "pIva": null, 
    "subCode": "IT" 
}] 

Diese json in einer Form verwendet wird von einem ng-repeat und das Null-Feld gefüllt werden soll. Wenn die Submit-Taste gedrückt wird, sollte das System prüfen, ob noch ein leeres Feld vorhanden ist. So könnte die Situation jetzt diese sein:

[{ 
    "name": "Alex", 
    "code": "05422180283", 
    "pIva": "05422180283", 
    "subCode": null 
}, { 
    "name": "John", 
    "code": "88985556", 
    "pIva": "1919ASVVV", 
    "subCode": "9991VVVV" 
}, { 
    "name": "Billy", 
    "code": "89952366555", 
    "pIva": "BB588918989", 
    "subCode": "ASA234434" 
}, { 
    "name": "Tom", 
    "code": null, 
    "pIva": "541198198", 
    "subCode": "ACEVV9999" 
}] 

Wie Sie sehen können, gibt es 2 Nullfelder. In dieser Situation sollte das System dem Benutzer mitteilen, dass es 2 leere Felder gibt. (mit einer Warnung oder etwas Ähnlichem). Andernfalls kann der Benutzer das Formular ohne Probleme senden. Dies ist, was ich bisher getan habe:

angular.forEach($scope.myArray, function(items){ 
       if(_.chain(items).find(_.isNull).isNull().value()) { 
        //console.log('Found one'); 
        formHasEmptyFields = true; 
       } else { 
        //console.log('Did not find one'); 
        formHasEmptyFields = false; 
       } 
       if(_(items).find(_.isNull) === null) { 
        //console.log('Found one'); 
        formHasEmptyFields = true; 
       } else { 
        //console.log('Did not find one'); 
        formHasEmptyFields = false; 
       } 
      }); 
      if(formHasEmptyFields == true) { 
       alert('There are empty fields'); 
      } else { 
       submitFunction($scope.myArray); 
      } 

Aber es funktioniert nicht, weil scheint, dass es nur das letzte Objekt zu überprüfen. In der Tat, wenn ich das letzte Objekt in dem Formular fülle, zeigt es mir die Warnung nicht an. Irgendeine Idee? $scope.myArray ist mein Array von Objekten natürlich

+0

können Sie bitte auch Ihre HTML-Formular anhängen –

Antwort

1

Das Problem ist, dass formHasEmptyFieldswird wird true werden, wenn es eine null wird, wird es wieder mit false in der nächsten Iteration überschrieben.

Also, um dies zu lösen, nur formHasEmptyFields = false; einmal, vor der Schleife, und innerhalb der Schleife, nur den Code, der es auf true setzt.

Nach diesen, eine some oder every Methode ist für dieses Szenario nützlicher als eine forEach Schleife. Vielleicht möchten Sie das stattdessen verwenden.

+0

Sie wollen also hauptsächlich die else-Bedingungen löschen? –

+0

In der Tat, lass sie fallen. – trincot

+0

Ja, es funktioniert! Du hast recht! Vielen Dank! –

1

Siehe MDN docs für some

const hasItemWhithFalsyCode = items.some(x => !x.code); 

Sie können alle möglichen Sachen tun, wie Filter aus den Einzelteilen ohne Code

const itemsWithTruthyCode = items.filter(x => x.code); 

explictly Um zu überprüfen, für null

const hasItemWhithNullCode = items.some(x => x.code === null); 
+0

In der Tat, die Verwendung von 'einige' ist besser als' forEach' in diesem Szenario: Es beendet die Schleife, sobald es eine bestimmte Bedingung ist. Es wäre für das OP nützlich, wenn Sie den Code speziell für ihren Fall bereitstellen würden. – trincot

Verwandte Themen