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

问题描述 投票:1回答:5

给定以下对象数组:

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 ]
javascript typescript
5个回答
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属性的新对象。


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

如果你像杰瑞德那样加入add in some destructuring,那就更是如此了。 :-)


1
投票

您可以使用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);

1
投票

我不太明白所需的输出符号,你可以使用地图反正:

myObject.map(element => element.Y) // Output [2, 5, 8]
myObject.map(element => ({Y: element.Y})) // Output [{Y: 2}, {Y: 5}, {Y: 8}]

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);
© www.soinside.com 2019 - 2024. All rights reserved.