2016-06-05 13 views
1

Ich bin irgendwie mit einem Problem fest. Dies ist die Antwort für meinen AJAX-Anruf.Objekt erhalten Sie den Wert von einem Schlüssel

var test = [ 
    { 
    "analytics.feature": "false" 
    }, 
    { 
    "demo": "true" 
    }, 
    { 
    "analytics.demo": "false" 
    } 
] 

Jetzt möchte ich überprüfen, ob analytic.demo aktiviert oder deaktiviert ist.

Kann ich _.find verwenden?

_.find(test, {analytics.demo}); // returns error

Ich will nur das tun

if(analytics.demo) { 
//Do something 
} 

Wie kann ich das tun? Kann jemand helfen?

Anstatt Objekte zu iterieren und zu vergleichen, kann ich undscorejs/jQuery verwenden, um den genauen Wert für einen Schlüssel zu erhalten?

+0

Was ist falsch plain javascript? 'test [2] [" analytics.demo "]' gibt "false" zurück ... – nicael

+0

Die Reihenfolge ändert sich ständig. Gibt es da trotzdem kann ich den "Schlüssel" suchen und den Wert bekommen. Anstatt blind zu testen [2] @nicael – TechnoCorner

Antwort

3
const options = Object.assign(...test) 
console.log(options) // { "analytics.feature": "false", demo: "true", "analytics.demo": "false" } 
if (options['analytics.demo'] === 'true') { 
    // ... 
} 

(Beachten Sie, dass diese ES6 verwendet. Für ES5 var options = Object.assign.apply(object, test) stattdessen verwenden, und Sie müssen auch Object.assign POLYfill.)

Dies verwendet Object.assign() mit dem spread operator zu fusionieren die Objekte zu einem zusammen und dann die Option "analytics.demo" aus dem neuen Einzelobjekt. Es muss unter Verwendung von bracket notation zugegriffen werden, da der Schlüssel ein Punkt in hat. Es wird mit der Zeichenfolgetrue verglichen, da "false" (Zeichenfolge) wahr ist, aber false (boolean) ist falsch.

Es gibt weitere Informationen über SO über flattening arrays und converting strings to booleans.

PS gibt es eine Möglichkeit, wie Sie den Ajax-Aufruf richtige Boolean statt Strings verwenden können? Es wäre einfacher zu arbeiten.

2

Angenommen, Sie verwenden Strich Besuchen die Dokumentation zu finden: http://underscorejs.org/#find

Suche läuft eine Prädikatfunktion für jedes Element in einem Array und gibt ein neues Array, das jeden Wert enthält, in dem das Prädikat Funktion zurückgegeben wahr .

In diesem Fall wir finden wollen, wenn das Element ein Feld analytics.demo hat Um dies zu tun, können wir die Unterstreichungsfunktion _.has verwenden: http://underscorejs.org/#has

alles in allem:

var result = _.find(test, function(elem) { 
    return _.has(elem, "analytics.demo"); 
    } 
); 
3

Sie kann prüfen, ob eines der Elemente im Array mit einer bestimmten Bedingung übereinstimmt:

Wenn die Werte boolesch waren, könnten Sie === 'true'

2

entfernen Sie könnten durchlaufen und überprüfen, ob der Schlüssel gegeben ist und dann das Ergebnis zurückgeben.

function getKeyValue(array, key) { 
 
    var value; 
 
    array.some(function (a) { 
 
     if (key in a) { 
 
      value = a[key]; 
 
      return true; 
 
     } 
 
    }); 
 
    return value; 
 
} 
 

 
var test = [{ "analytics.feature": "false" }, { "demo": "true" }, { "analytics.demo": "false" }] 
 

 
console.log(getKeyValue(test, 'analytics.demo')); // 'false' a string with this value

Verwandte Themen