2016-11-21 7 views
2

Ich habe ein Objekt wie soFilter-Objekt durch Anordnung von Eigenschaftsnamen

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3} 

und ein Array

var arr = [name2, name3] 

Beide dynamisch erstellt werden. Ich muss Objekt für Array filtern (genau nach Eigenschaftsnamen, nicht nach seinen Werten). Aber bis jetzt sind alle Methoden, die ich gefunden habe, über Werte filtern. So sollte Ergebnis

sein
var result = {name2: somevalue2, name3: somevalue3} 

I Winkel bin mit, unterstreichen. Ich muss es nicht in Vorlage, sondern in Controller filtern. Ich freue mich über jede Hilfe!

+0

Meinen Sie 'var arr = [ "name2", "name3"]'? – Rayon

+0

Ja, es ist var arr = ["name2", "name3"] – jmt

Antwort

2

Sie können _.pick verwenden, um das Objekt zu "filtern".

var obj = { name1: "somevalue1", name2: "somevalue2", name3: "somevalue3"}; 
 
var keys = ["name1", "name2"]; 
 

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

+0

So elegant, danke! – jmt

+0

Gern geschehen :) – acontell

1

Sie könnten die Schlüssel iterieren und ein neues Objekt mit Schlüsselwertpaaren erstellen.

var obj = { name1: 'somevalue1', name2: 'somevalue2', name3: 'somevalue3' }; 
 
    arr = ['name2', 'name3'], 
 
    result = Object.create(null); 
 

 
arr.forEach(function (k) { 
 
    result[k] = obj[k]; 
 
}); 
 

 
console.log(result);

+0

'Array # reduce' könnte verwendet werden! – Rayon

+1

Richtig, das würde auch funktionieren. –

+1

danke, du hast meinen Tag gerettet! – jmt

1

können Sie reduce() Objekt zurückkehren.

var obj = { 
 
    name1: 'somevalue1', 
 
    name2: 'somevalue2', 
 
    name3: 'somevalue3' 
 
} 
 
var arr = ['name2', 'name3'] 
 

 
var result = Object.keys(obj).reduce(function(r, e) { 
 
    if (arr.indexOf(e) != -1) r[e] = obj[e]; 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

+0

Zeit Komplexität ist 'n2'. Es kann in 'n' – intekhab

0

Iterate für jedes Element des Arrays und prüfen, ob Elemente in Objekt verfügbar sind als Schlüsselnamen dann in Folge gesetzt.

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3};// This is ur object 

var arr = [name2, name3];// and this is the array for each element you have to get values from obj 

var filterResult = {};// An object to stored the filtered values 

arr.forEach(function(elem){ // Iterate for each element of array 
    if (obj[elem]) // check in your data object if any key is available of the name of array element 
     filterResult[elem] = obj[elem]; // then put it in filtered object 
}); 

console.log(filterResult); 
+0

durchgeführt werden. Während dieser Code die Frage beantworten kann, verbessert das Bereitstellen zusätzlichen Kontexts, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – ryanyuyu

Verwandte Themen