在 JavaScript 中以功能方式提取 属性 和值
Extract property and value in a functional way in 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 循环部分,但无法弄清楚。任何人都可以对此有所了解。
简单的答案是使用 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));
你可能会这样做。它非常实用;
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);
假设我们有一个数组,其中包含一个对象的所有属性,我们有兴趣从对象数组中提取它们的值。每个都以对象的形式出现。
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 循环部分,但无法弄清楚。任何人都可以对此有所了解。
简单的答案是使用 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));
你可能会这样做。它非常实用;
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);