2017-02-01 2 views
0

dieüberprüfen Array von Objekten in lodash für Eigenschaftswert

var content = [{ 
     "set_archived": false, 
     "something": [{ 
      "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
      "modified": "2016-12-01T18:23:29.743333Z", 
      "created": "2016-12-01T18:23:29.743333Z", 
      "archived": false 
     }] 
    }, 
    { 
     "set_archived": true, 
     "something": [{ 
      "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
      "modified": "2017-01-30T19:42:29.743333Z", 
      "created": "2017-01-30T19:42:29.743333Z", 
      "archived": false 
     }] 
    } 
]; 

Mit Lodash folgenden gegeben, wie würde ich, wenn entweder set_archived oder something.archived in der Anordnung von Objekten bestimmen gleich wahr ist?

Also in diesem Fall, weil das zweite Objekt set_is_archived wahr ist, dann sollte die erwartete Antwort wahr sein. Wenn alle Elemente in beiden Objekten falsch sind, sollte die Antwort falsch sein.

+0

Gibt es einen Grund, dass Sie lodash verwenden müssen? Es gibt viele [Möglichkeiten, dies in einfachem altem JavaScript zu tun] (http://stackoverflow.com/q/8217419/215552) –

+1

Mögliches Duplikat von [Can \ _lodash Test ein Array, um zu überprüfen, ob ein Array-Element ein Feld mit hat ein bestimmter Wert?] (http://stackoverflow.com/questions/21278661/can-lodash-test-an-array-to-check-if-an-array-element-has-a-field-with-a- certai) –

+0

'content.some (c => (c.set_archived || c.etwas.some (s => s.archived)))' – Andreas

Antwort

1

Verwenden Sie einfach:

_.filter(content, o => o["set_archived"] || o.something[0].archived).length > 0; 

oder

_.some(content, o => o["set_archived"] || o.something[0].archived); 

PlainJs:

content.some(o => o["set_archived"] || o.something[0].archived) 

oder

content.filter(o => o["set_archived"] || o.something[0].archived).length > 0; 
1

Yo Sie können einfach some() in einfachem Javascript verwenden.

var content = [{ 
 
    "set_archived": false, 
 
    "something": [{ 
 
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
 
    "modified": "2016-12-01T18:23:29.743333Z", 
 
    "created": "2016-12-01T18:23:29.743333Z", 
 
    "archived": false 
 
    }] 
 
}, { 
 
    "set_archived": true, 
 
    "something": [{ 
 
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
 
    "modified": "2017-01-30T19:42:29.743333Z", 
 
    "created": "2017-01-30T19:42:29.743333Z", 
 
    "archived": false 
 
    }] 
 
}]; 
 

 
var result = content.some(function(e) { 
 
    return e.set_archived === true || e.something[0].archived === true 
 
}) 
 
console.log(result)

0

Sie brauchen nicht lodash dafür. Sie können dies mit reinem JS, mit filter:

content.filter(i => i.set_archived || i.something.archied) 
0

Betrachtet man das gleiche Objekt wie das in der Frage, gibt es einige Möglichkeiten, um die Lösung für Ihr Problem Partner zu finden.

var flag = false; 
flag = content.some(function(c){ 
    if(c["set_archived"]){ 
    return true; 
    } 
}); 

console.log(flag) 

oder

var flag = false; 
    flag = content.some(function(c){ 
     if(c["set_archived"] || c.something[0].archived){ 
     return true; 
     } 
    }); 

    console.log(flag) 

Die obige Snippet wird wahr ergeben, wenn atleast eine der Aufgabe der Array hat [ „set_archived“] Eigenschaft wahr, und es wird, wenn alle Objekte des Arrays false zurück hat ["set_archived"] als falsch. (Ich könnte umgekehrt gesagt haben)

Die some() Methode testet, ob irgendein Element im Array den Test besteht, der durch die zur Verfügung gestellte Funktion durchgeführt wird.

Die every() Methode testet, ob alle Elemente im Array den von der bereitgestellten Funktion implementierten Test bestehen.

Wenn Sie nach einer strikteren Art und Weise suchen, die Sie mit jedem() weitermachen.

Verwandte Themen