给定以下对象数组:
var myObject =
[
{X:1, Y:2, Z:3},
{X:4, Y:5, Z:6},
{X:7, Y:8, Z:9},
]
获得以下输出的优雅代码是什么?:
var subset = [ Y:2, Y:5, Y:8 ]
const arr = [
{X:1, Y:2, Z:3},
{X:4, Y:5, Z:6},
{X:7, Y:8, Z:9},
];
const output = arr.map(({Y}) => ({Y})); // [{Y: 2}, {Y: 5}, {Y: 8}]
这使用映射在数组上的箭头函数,从每个项目中解析Y
属性,并使用对象属性简写为数组的每个项目返回仅具有Y属性的新对象。
带箭头功能的map
相当优雅:
var myObject =
[
{X:1, Y:2, Z:3},
{X:4, Y:5, Z:6},
{X:7, Y:8, Z:9},
];
var result = myObject.map(e => ({Y: e.Y}));
console.log(result);
如果你像杰瑞德那样加入add in some destructuring,那就更是如此了。 :-)
您可以使用map函数实现此目的
var myObject = [
{X:1, Y:2, Z:3},
{X:4, Y:5, Z:6},
{X:7, Y:8, Z:9},
];
var test = myObject.map(row => {
return {
Y: row.Y
};
});
console.log(test);
我不太明白所需的输出符号,你可以使用地图反正:
myObject.map(element => element.Y) // Output [2, 5, 8]
myObject.map(element => ({Y: element.Y})) // Output [{Y: 2}, {Y: 5}, {Y: 8}]
根据您希望代码的可重用性,我发现添加一些currying相当优雅:
const arr = [
{X:1, Y:2, Z:3},
{X:4, Y:5, Z:6},
{X:7, Y:8, Z:9},
];
const get = prop => o => ({[prop]: o[prop]});
const extract = arr => prop => arr.map(get(prop));
const result = extract(arr)('Y');
console.log(result);