2016-08-03 8 views
1

Betrachten wir ein Array, das alle Eigenschaften eines Objekts enthält, deren Werte wir aus einem Array von Objekten extrahieren möchten. Jedes in einer Form eines Objekts.Extrahieren Sie Eigenschaft und Wert in einer funktionalen Weise in JavaScript

var keys = ['name', 'age']; 

Sagen wir, wir haben eine Reihe von Studenten. Ein Schülerobjekt sieht so aus:

var student = {name:"Sarah", age:"20", address:"123 Main St."}; 

Wir haben eine Reihe von Studenten.

Mit dem untenstehenden Code ist es möglich, Eigenschaften und Werte, die uns interessieren, von jedem Schüler zu extrahieren. Die Eigenschaften, an denen wir interessiert sind, sind unsere oben erwähnten Schlüssel.

function pluck(keys) { 
    return function(students) { 
     return students.map(i => { 
      var ex = {}; 
      for (var k = 0; k < keys.length; k++) { 
       if (i.hasOwnProperty(keys[k])) { 
        ex[keys[k]] = i[keys[k]]; 
       } 
      } 
      return ex; 
     }); 
    }; 
} 

Ich denke, es eine bessere und einfachere Möglichkeit, dies vor allem der Teil für Schleife tun Pfeil Funktionen, kann dies aber nicht herausfinden. Könnte irgendjemand etwas dazu sagen.

+0

Wo Sie 'Artikel', ich denke du meinst 'Schüler' (oder umgekehrt). Die tatsächliche Antwort kommt getrennt. –

+0

Ich denke, meine erste Frage ist was "Gegenstände". Wie es aussieht. Ich nehme an, "Student" ist Ihre erwartete Ausgabe? –

+0

Dank @SMcCrohan. Ich habe die Korrektur vorgenommen. – Vahid

Antwort

1

mit Sie könnte so tun. Es ist ziemlich funktional;

var keys = ["name","age"], 
 
students = [{name:"Sarah", age:"20", address:"123 Main St."}, 
 
      {name:"Janet", age:"21", address:"123 Main St."}, 
 
      {name:"Peter", age:"22", address:"123 Main St."}, 
 
      {name:"Jesse", age:"19", address:"123 Main St."}, 
 
      {name:"Marla", age:"20", address:"123 Main St."} 
 
      ], 
 
    result = students.reduce((p,c) => p.concat(keys.reduce((o,k) => Object.assign(o,{[k]: c[k]}),{})),[]); 
 
console.log(result);

1

Einfache Antwort ist das gemeinsame Muster verwendet, Objekte aus einem einzelnen Objekt zu extrahieren reduce verwenden und beziehen sich auf ein Array von Objekten map

function selectFromArray(array, keys) { 
 
    return array.map(function(item) { 
 
    return keys.reduce(function(o, k) { 
 
     o[k] = item[k]; 
 
     return o; 
 
    }, {}); 
 
    }); 
 
} 
 

 
var keys = ['age', 'name']; 
 
var students = [{age: 5,name: 'joe',sex: 'm'}, {age: 6,name: 'sue',sex: 'f'}]; 
 
var subset = selectFromArray(students, keys); 
 
alert(JSON.stringify(subset));