在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循环部分,但无法解决这个问题。有人能解释一下吗。
您可能喜欢这样做。它非常实用;
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));
相关文章:
- 如何提取“;href"最近列表项中的属性值
- 在不使用lodash-get的情况下从json中提取深层属性
- JavaScript无法提取引号css属性
- 从NodeList中提取属性值
- Javascript:如何通过Regexp从属性中提取字符串
- 创建新的javascript数组,从对象属性中提取数据
- 如何使用JQuery从文本区域内容中提取属性
- 如何使用正则表达式从javascript/jquery中的属性值中提取文本
- 提取并调用在元素的 onclick HTML 属性中定义的 JavaScript 函数(使用 jQuery attr/p
- 更改 TD 属性并保留从站点提取的数据中获取值
- 从对象中提取每个属性的 1
- 当在数组中找到关键字时,在对象中循环以提取属性名称的问题
- 如何从HTML中提取属性和文本
- 从数组中提取属性
- 使用jquery从HTML中提取属性
- 从XML文件中提取属性
- 从删除/复制的对象中提取属性,然后分配给其他对象
- 在JavaScript中以函数方式提取属性和值
- jQuery从xml文档中提取属性
- jQuery从html标签中提取属性id