2016-08-03 5 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; 
     }); 
    }; 
} 

Я думаю, что это лучший и простой способ сделать это особенно для петлевой части с помощью функции стрелок, но не могу понять это. Может ли кто-нибудь пролить свет на это.

+0

Где у вас есть 'вещи', я думаю, что вы имеете в виду 'студентов' (или наоборот). Фактический ответ приходит отдельно. –

+0

Я предполагаю, что мой первый вопрос - это то, что такое 'items'. Как это выглядит. Я предполагаю, что «ученик» - ваш ожидаемый результат? –

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