2017-02-24 3 views
0

Wie geben Sie Objekte in einem Array zurück, wenn sie bestimmte Schlüssel/Wert-Paare enthalten?Rückgabeobjekt im Array, wenn Schlüsselwertpaare enthalten

Ich muss es zurückgeben, wenn es alle Schlüsselwertpaare gegeben hat, nicht nur eins.

beispielsweise

diese Funktion mit dem Array von Objekten als 1. Argument und ein Objekt mit gegebenen Schlüsselwert-Paaren als 2. Argument

whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }); 

sollte Rück

[{ "a": 1, "b": 2 }, { "a": 1, "b": 2, "c": 2 }] 
+1

Was meinst du mit 'hat alle Schlüsselwert pairs'? – Rajesh

+0

Mögliches Duplikat von [Holen Sie JavaScript-Objekt aus Array von Objekten nach Wert oder Eigenschaft] (http://stackoverflow.com/questions/13964155/get-javascript-object-from-array-of-objects-by-value-oder- Eigentum) – Rajesh

Antwort

1

Sie können dies mit filter() und every() tun.

function whatIsInAName(a, b) { 
 
    return a.filter(function(e) { 
 
    return Object.keys(b).every(function(c) { 
 
     return e[c] == b[c] 
 
    }) 
 
    }) 
 
} 
 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }))

+0

Danke für die Hilfe! bin dankbar! –

0

Verwenden Array#filter Methode mit Array#every Methode.

function whatIsInAName(arr, obj) { 
 
    // get the keys array 
 
    var keys = Object.keys(obj); 
 
    // iterate over the array 
 
    return arr.filter(function(o) { 
 
    // iterate over the key array and check every property 
 
    // is present in the object with the same value 
 
    return keys.every(function(k) { 
 
     return obj[k] === o[k]; 
 
    }) 
 
    }) 
 
} 
 

 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));

+0

Danke! schätze deine Hilfe! –

0

Sie könnten das Array mit einem Scheck für den Schlüssel und Werte des Musters filtern.

function whatIsInAName(array, pattern) { 
 
    var keys = Object.keys(pattern); 
 
    return array.filter(function (o) { 
 
     return keys.every(function (k) { 
 
      return pattern[k] === o[k]; 
 
     }); 
 
    }); 
 
} 
 

 
console.log(whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }));

+1

'pattern [k] = o [k]' das ist eine Asignment, kein Vergleich;) und ich würde diesen Teil 'Object.keys (pattern)' aus der Schleife entfernen/extrahieren – Thomas

1

Verwenden Underscore.js. Es ist einfach.

function whatIsInAName(a, b){ 
 
\t return _.where(a, b); 
 
} 
 
var data = whatIsInAName([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 }); 
 

 
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

Verwandte Themen