给定以下对象数组:
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 ]
答案 0 :(得分:6)
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属性的新对象,用于数组的每个项目。
答案 1 :(得分:4)
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);
如果你像Jared那样add in some destructuring,那就更是如此了。 : - )
答案 2 :(得分:1)
您可以使用地图功能
来实现这一目标
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);

答案 3 :(得分:1)
我没有完全理解所需的输出符号,无论如何都可以使用地图:
myObject.map(element => element.Y) // Output [2, 5, 8]
myObject.map(element => ({Y: element.Y})) // Output [{Y: 2}, {Y: 5}, {Y: 8}]
答案 4 :(得分:0)
根据您希望代码的可重用性,我发现添加一些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);