如何从数组中提取字段?

时间:2019-02-06 11:50:02

标签: javascript ecmascript-6

let obj = [{ first: 'Jane', last: 'Doe'  , x : 1 },
          { first: 'Jane1', last: 'Doe1', x : 2 },
          { first: 'Jane2', last: 'Doe2', x : 3 },
          { first: 'Jane3', last: 'Doe4' , x : 4}];
          
          // gives false for unsatisfied condition, which is fine I believe
          let res = obj.map( o =>  {  return o.x > 2 && {  "first": o.first, "x": o.x  }  } )
          // below returns all fields where as I want only two fields
          let res1 = obj.filter( o => {  return o.x > 2 && {  "first": o.first, "x": o.x  } } )
          
console.log(res)
console.log(res1)

如何获取有条件的第一个和x个字段

预期产量

[
   {
    "first": "Jane2",
    "x": 3
  },
  {
    "first": "Jane3",
    "x": 4
  }
]

谢谢

3 个答案:

答案 0 :(得分:3)

您可以使用.reduce来形成x大于2的对象数组。在这里,我使用destructuring assignment从给定对象中获取firstx属性,然后使用三元运算符检查是否将对象添加到数组中:

const arr = [{first:'Jane',last:'Doe',x:1},{first:'Jane1',last:'Doe1',x:2},{first:'Jane2',last:'Doe2',x:3},{first:'Jane3',last:'Doe4',x:4}],

res = arr.reduce((acc, {first, x}) =>  x > 2 ? [...acc, {first, x}]:acc, []);
console.log(res);

答案 1 :(得分:1)

只需连接这两个功能

Vec<&& String>

答案 2 :(得分:0)

您可以使用过滤器根据您的条件获取新的阵列。这很有用,因为它不会修改您现有的阵列。 然后,您可以使用地图修改结构,如图所示。

const arr = [{
    first: 'Jane',
    last: 'Doe',
    x: 1
  },
  {
    first: 'Jane1',
    last: 'Doe1',
    x: 2
  },
  {
    first: 'Jane2',
    last: 'Doe2',
    x: 3
  },
  {
    first: 'Jane3',
    last: 'Doe4',
    x: 4
  }
],

res = arr.filter(item => item.x > 2).map(({first,x}) => ({first,x}));
console.log(res);