优雅的代码从对象数组中提取子集数组?

时间:2017-12-20 13:33:09

标签: javascript typescript

给定以下对象数组:

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 ]

5 个答案:

答案 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);