在JavaScript中以函数方式提取属性和值

Extract property and value in a functional way in JavaScript

本文关键字:提取 属性 方式 函数 JavaScript      更新时间:2023-09-26

考虑我们有一个数组,其中包含我们感兴趣的对象的所有属性,以便从对象数组中提取它们的值。每个都以一个物体的形式存在。

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循环部分,但无法解决这个问题。有人能解释一下吗。

您可能喜欢这样做。它非常实用;

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

简单的答案是使用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));