Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中以函数方式提取属性和值_Javascript_Arrays_Arrow Functions - Fatal编程技术网

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

在JavaScript中以函数方式提取属性和值,javascript,arrays,arrow-functions,Javascript,Arrays,Arrow Functions,假设我们有一个数组,其中包含我们感兴趣的对象的所有属性,并从对象数组中提取它们的值。每一个都以一个物体的形式存在 var keys = ['name', 'age']; 假设我们有一群学生。学生对象看起来像: var student = {name:"Sarah", age:"20", address:"123 Main St."}; 我们有一批学生 使用下面的代码可以从每个学生那里提取我们感兴趣的属性和值。我们感兴趣的属性是上面提到的键 function pluck(keys) {

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

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;
        });
    };
}
功能弹拨(按键){
返回函数(学生){
返回学生。地图(i=>{
var ex={};
对于(var k=0;k

我认为有一种更好、更简单的方法,尤其是使用箭头函数的for循环部分,但无法解决这个问题。有谁能解释一下这一点。

简单的答案是使用通用模式,使用
reduce
从单个对象提取属性,并使用
map
应用于对象数组

函数selectFromArray(数组,键){
返回数组.map(函数(项){
返回键。减少(功能(o,k){
o[k]=项目[k];
返回o;
}, {});
});
}
变量键=['age','name'];
var students=[{年龄:5岁,姓名:'joe',性别:'m'},{年龄:6岁,姓名:'sue',性别:'f'}];
变量子集=selectFromArray(学生、键);

警报(JSON.stringify(子集))您可以这样做。它相当实用

var key=[“名称”,“年龄”],
学生=[{姓名:“莎拉”,年龄:“20”,地址:“主街123号”},
{姓名:“珍妮特”,年龄:“21”,地址:“缅因街123号”},
{姓名:“彼得”,年龄:“22”,地址:“主街123号”},
{姓名:“杰西”,年龄:“19岁”,地址:“主街123号”},
{姓名:“玛拉”,年龄:“20”,地址:“123大街”}
],
结果=students.reduce((p,c)=>p.concat(key.reduce((o,k)=>Object.assign(o,{[k]:c[k]}),{})),[]);

控制台日志(结果)如果你有“项目”,我想你指的是“学生”(反之亦然)。实际答案是分开来的。我想我的第一个问题是什么是
项目
。看起来怎么样。我想
student
是您的预期输出吗?谢谢@smcrohan。我改正了。