如何转换数组?
How do I transform an array?
我有一个形式的数组:
[
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
我想要获取以下形式的数组:
[
{
name: 'One',
value: 10
},
{
name: 'Two',
value: 20
}
]
例如,我可以用地图对其进行转换吗?
或者我需要其他方法吗?
您可以使用Object.values() along with Array.flatMap()得到所需的结果:
let arr = [
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
let result = arr.flatMap(obj => Object.values(obj));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
flatMap功能并非所有版本都支持,您可以check this
您可以使用支持的数组方法示例尝试此功能:
function transform(arr) {
let empty = [];
arr.forEach(obj => {
const secondArr = Object.entries(obj);
empty.push(...secondArr.map(arr => arr[1]));
});
return empty;
}
这里有一个例子 JSFiddle PlayGround
编辑:我看到你更正了原来的 post,这个答案不再相关,因为我猜你想定义的数组不是你真正想要的。出于教育目的,我将保留我原来的答案,但为了回答你的问题,我建议你查看@terry-lennox 的答案
您指定的第一个数组无效:这意味着两个元素都具有此形状:
foo: {
name: 'One',
value: 10
}
这不是一个有效的元素。我猜你的意思是每个元素都是一个对象本身,比如:
{
foo: {
name: 'One',
value: 10
}
}
所以,原数组应该是:
[{
foo: {
name: 'One',
value: 10
}
}, {
bar: {
name: 'Two',
value: 20
}
}]
有了这个,您的目标是检索数组的每个元素中第一个键的对象。你可以这样做:
yourArray.map(item => item[Object.keys(item)[0]]);
map()
将 return 通过 运行 其函数参数 yourArray
的每个元素的新数组。 map()
中指定的函数只是 return 每个项目的第一个键上的任何内容。
因为map函数会return结果以嵌套数组的形式出现。我们只对对象中存在的对象的值部分感兴趣。所以我们可以使用 Objects.values() 来得到它。最后,我们可以将嵌套数组展平,得到需要的结果
let data = [
{
foo: {
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
];
console.log(
Object.values(data).map(i => {
return Object.values(i);
}).flat()
);
我有一个形式的数组:
[
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
我想要获取以下形式的数组:
[
{
name: 'One',
value: 10
},
{
name: 'Two',
value: 20
}
]
例如,我可以用地图对其进行转换吗? 或者我需要其他方法吗?
您可以使用Object.values() along with Array.flatMap()得到所需的结果:
let arr = [
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
let result = arr.flatMap(obj => Object.values(obj));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
flatMap功能并非所有版本都支持,您可以check this
您可以使用支持的数组方法示例尝试此功能:
function transform(arr) {
let empty = [];
arr.forEach(obj => {
const secondArr = Object.entries(obj);
empty.push(...secondArr.map(arr => arr[1]));
});
return empty;
}
这里有一个例子 JSFiddle PlayGround
编辑:我看到你更正了原来的 post,这个答案不再相关,因为我猜你想定义的数组不是你真正想要的。出于教育目的,我将保留我原来的答案,但为了回答你的问题,我建议你查看@terry-lennox 的答案
您指定的第一个数组无效:这意味着两个元素都具有此形状:
foo: {
name: 'One',
value: 10
}
这不是一个有效的元素。我猜你的意思是每个元素都是一个对象本身,比如:
{
foo: {
name: 'One',
value: 10
}
}
所以,原数组应该是:
[{
foo: {
name: 'One',
value: 10
}
}, {
bar: {
name: 'Two',
value: 20
}
}]
有了这个,您的目标是检索数组的每个元素中第一个键的对象。你可以这样做:
yourArray.map(item => item[Object.keys(item)[0]]);
map()
将 return 通过 运行 其函数参数 yourArray
的每个元素的新数组。 map()
中指定的函数只是 return 每个项目的第一个键上的任何内容。
因为map函数会return结果以嵌套数组的形式出现。我们只对对象中存在的对象的值部分感兴趣。所以我们可以使用 Objects.values() 来得到它。最后,我们可以将嵌套数组展平,得到需要的结果
let data = [
{
foo: {
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
];
console.log(
Object.values(data).map(i => {
return Object.values(i);
}).flat()
);