我有一個形式的陣列:
[
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
我想得到一個形式的陣列:
[
{
name: 'One',
value: 10
},
{
name: 'Two',
value: 20
}
]
例如,我可以用地圖對其進行轉換嗎?還是我需要另一種方式?
uj5u.com熱心網友回復:
您可以使用Object.values()和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; }
uj5u.com熱心網友回復:
并非所有版本都支持 flatMap 功能,您可以檢查一下
您可以使用支持的陣列方法示例嘗試此功能:
function transform(arr) {
let empty = [];
arr.forEach(obj => {
const secondArr = Object.entries(obj);
empty.push(...secondArr.map(arr => arr[1]));
});
return empty;
}
這是JSFiddle PlayGround中的一個示例
uj5u.com熱心網友回復:
編輯:我看到你更正了原始帖子,這個答案不再相關,因為我猜你想要定義的陣列不是你真正想要的。我將出于教育目的保留我的原始答案,但要回答您的問題,我建議您查看@terry-lennox 答案https://stackoverflow.com/a/70770819/12166040
您指定的第一個陣列無效:這意味著兩個元素都具有以下形狀:
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()將通過為 的每個元素運行其函式引數來回傳一個新陣列yourArray。并且內部指定的函式map()只回傳每個專案的第一個鍵上的任何內容。
uj5u.com熱心網友回復:
您可以使用
let data = [
{
foo: {
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
];
console.log(
Object.values(data).map(i => {
return Object.values(i);
}).flat()
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/415606.html
標籤:
