2016-08-03 2 views
1

オブジェクトの配列からその値を抽出したいオブジェクトのすべてのプロパティを含む配列があるとします。それぞれがオブジェクトの形式である。JavaScriptの機能的な方法でプロパティと値を抽出する

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

私たちには学生の配列があります。学生オブジェクトは次のようになります。

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

私たちは学生の配列を持っています。

以下のコードを使用して、各生徒が興味を持っているプロパティと値を抽出できます。興味のあるプロパティは、上記のキーです。

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; 
     }); 
    }; 
} 

これは、特に矢印機能を使用してforループ部分を行うより良い方法ですが、これを理解することはできません。誰もがこれについていくつかの光を当てることができます。

+0

、私はあなたが「学生の(またはその逆)を意味だと思います。実際の答えは別に来る。 –

+0

私の最初の質問は 'items'と思われます。それはどのように見える。私は 'student'があなたの期待される出力だと思いますか? –

+0

ありがとう@SmcCrohan。私は訂正をした。 – Vahid

答えて

1

を使用してオブジェクトの配列に適用されています。それはかなり機能的です。あなたは 'アイテム' を持っている

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

簡単な答えはreduceを使用して、単一のオブジェクトからプロパティを抽出するための一般的なパターンを使用して、あなたは、このように行う可能性があります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));

関連する問題