我具有以下结构
const objArray = [ { shiftId: 89192 },
{ shiftId: 89193 },
{ shiftId: 89190 } ]
对象数组。
我正在尝试映射并提取shiftId
我要做的是
object.map(el=> Object.values(el));
,但是此映射返回以下结构,因为Object.values
不幸地返回了一个数组。
[ [ 89192 ], [ 89193 ], [ 89190 ] ]
仅包含一个元素的嵌套数组。 我该如何映射到仅支持数组。
答案 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);
或者,如果对象还包含您不希望包含的其他属性,而您只想要shiftId
和id
:
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)