2017-03-09 1 views
0

Ich habe ein JSON-Array als unten.Wenn ich mindestens ein Objekt mit Status als Aktiv finde, muss ich response = true oder sonst false.Ich versuchte unten, aber nicht funktioniert .can jemand helfen.Kleines Problem in JavaScript-Array-Objekt Logik

arr=[{"id":"1","status":"active"},{"id":"2","status":"complete"}, 
{"id":"3","status":"complete"}] 
for (var i = 0; i < arr.len; i++) {       
    if (arr[i].status == "active") { 
     response = true; 
    } else { 
     response = false; 
    } 
} 
console.log(response); 
+0

Verwenden 'i Riddler

+0

@Riddler Problem hier ist, wenn Array als aktiv haben, komplett, komplett ..Ich gebe es mir als falsch .... Aber für den Fall, dass ich vollständig, vollständig, aktiv bin, gibt es mir die Wahrheit .. Eigentlich sollte es mir auf jeden Fall wahr geben – user7350714

Antwort

3

Verwenden Array#some zu überprüfen, ob mindestens ein Element status Eigenschaft mit active Wert bekam.

var arr = [{"id":"1","status":"active"},{"id":"2","status":"complete"}, 
 
{"id":"3","status":"complete"}], 
 
    response = arr.some(v => v.status == 'active'); 
 
    console.log(response);

+1

'v.status == 'aktiv'? true: false; '->' v.status == 'active;' ' –

+0

@EvanTrimboli Vielen Dank. –

0
var response = false; 
var arr=[{"id":"1","status":"active"},{"id":"2","status":"complete"}, 
{"id":"3","status":"complete"}] 
for (var i = 0; i < arr.length; i++) {       
    if (arr[i].status == "active") { 
     response = true; 
     break; 
    } 
} 
console.log(response); 
1

Sie setzen Ihre response zu true, nicht die Schleife nicht durchbrechen und dann wieder eingestellt zu false, wenn Sie einen anderen Wert erfüllen.

Sie können einfach setzen Anfangsbedingung und dann break, wenn Sie einen Artikel finden. Sie können sogar nicht brechen, wenn Sie ein Objekt finden, aber es ist nutzlos, die Iteration fortzusetzen, wenn Sie bereits ein Objekt gefunden haben.

var arr = [{ 
 
    "id": "1", 
 
    "status": "active" 
 
    }, { 
 
    "id": "2", 
 
    "status": "complete" 
 
    }, 
 
    { 
 
    "id": "3", 
 
    "status": "complete" 
 
    } 
 
]; 
 

 
var response = false; 
 
for (var i = 0; i < arr.length; i++) { 
 
    if (arr[i].status == "active") { 
 
    response = true; 
 
    break; 
 
    }  
 
} 
 

 
console.log(response);

Eine weitere elegante Art und Weise ist Funktion zu nutzen und ein Kurzschluss Rückkehr machen:

var arr = [{ 
 
    "id": "1", 
 
    "status": "active" 
 
    }, { 
 
    "id": "2", 
 
    "status": "complete" 
 
    }, 
 
    { 
 
    "id": "3", 
 
    "status": "complete" 
 
    } 
 
]; 
 

 
function hasActiveStatus(a) { 
 
    for (var i = 0; i < a.length; i++) { 
 
    if (a[i].status == "active") { 
 
     return true; 
 
    } 
 
    } 
 
    
 
    return false; 
 
} 
 

 
var response = hasActiveStatus(arr); 
 
console.log(response);

Beachten Sie, dass .len für einige hatten reas an, ich habe es mit korrekter .length ersetzt.

noch eleganter Weg ist Array.prototype.some zu verwenden:

var arr = [{ 
 
    "id": "1", 
 
    "status": "active" 
 
    }, { 
 
    "id": "2", 
 
    "status": "complete" 
 
    }, 
 
    { 
 
    "id": "3", 
 
    "status": "complete" 
 
    } 
 
]; 
 

 
var response = arr.some(function(x) { return x.status === "active"; }); 
 
console.log(response);