从对象数组返回值

时间:2019-03-28 08:50:03

标签: javascript arrays object

我具有以下结构

   const objArray = [ { shiftId: 89192 },
       { shiftId: 89193 },
       { shiftId: 89190 } ]

对象数组。 我正在尝试映射并提取shiftId

的值

我要做的是 object.map(el=> Object.values(el));,但是此映射返回以下结构,因为Object.values不幸地返回了一个数组。

[ [ 89192 ], [ 89193 ], [ 89190 ] ]

仅包含一个元素的嵌套数组。 我该如何映射到仅支持数组。

3 个答案:

答案 0 :(得分:1)

您可以从第一个发现的值中获取属性。

var array = [{ anonymous: { shiftId: 89192 } }, { anonymous: { shiftId: 89193 } }, { anonymous: { shiftId: 89190 } }],
values = array.map(o => Object.values(o)[0].shiftId);

console.log(values);

答案 1 :(得分:0)

如果要提取shiftId属性,只需指定要提取该特定属性,而不要使用Object.values

const shiftIds = object.map(({ shiftId }) => shiftId);

请注意,这里有一个 array -如果您调用变量arrOfShiftObjs或类似的东西,而不是调用它object,则代码将更易于理解。 / p>

要从每个项目中提取多个值并将它们放入一个更大的数组中,请使用flatMap

const arr = [{
    shiftId: 89192,
    id: 'id'
  },
  {
    shiftId: 89193,
    id: 'id'
  },
  {
    shiftId: 89190,
    id: 'id'
  }
];
const values = arr.flatMap(Object.values);
console.log(values);

或者,如果对象还包含您不希望包含的其他属性,而您只想要shiftIdid

const arr = [{
    shiftId: 89192,
    id: 'id'
  },
  {
    shiftId: 89193,
    id: 'id'
  },
  {
    shiftId: 89190,
    id: 'id'
  }
];
const values = arr.flatMap(({ shiftId, id }) => [shiftId, id]);
console.log(values);

与使用所有较新的功能一样,如果要支持尚不具备的功能,请使用polyfill。当然,您也可以reduce代替

const arr = [{
    shiftId: 89192,
    id: 'id'
  },
  {
    shiftId: 89193,
    id: 'id'
  },
  {
    shiftId: 89190,
    id: 'id'
  }
];
const values = arr.reduce((a, { shiftId, id }) => {
  a.push(shiftId, id);
  return a;
}, []);
console.log(values);

答案 2 :(得分:0)

使用对象解构和Array.prototype.map

let array = [{ anonymous: { shiftId: 89192 } }, { anonymous: { shiftId: 89193 } }, { anonymous: { shiftId: 89190 } }]

let out = array.map(({anonymous: {shiftId}}) => shiftId)
console.log(out)