我有這個物件陣列,我想提取它的 ID。
const arr = [
{
"id": "1",
},
{
"id": "2",
"options": [
{
"id": "2.1",
}
]
},
]
我做了這個
const one = arr.map(ob => ob.id)
const two = arr.flatMap(ob => ob.options).map(ob => ob?.id).filter(Boolean)
console.log([...one, ...two])
效果很好,它列印['1', '2', '2.1']
出我想要的,但是有沒有更簡單或更短的方法來做到這一點?
uj5u.com熱心網友回復:
使用 foreach 遞回
const arr = [{
"id": "1",
},
{
"id": "2",
"options": [{
"id": "2.1",
}]
},
]
const getResult = (array, result = []) => {
array.forEach(val => {
result.push(val.id)
if (val.options) {
result = getResult(val.options, result)
}
})
return result
}
console.log(getResult(arr))
uj5u.com熱心網友回復:
這是一種可能的方法 -在映射器回呼.concat
中僅包含父屬性的陣列。id
const arr = [
{
"id": "1",
},
{
"id": "2",
"options": [
{
"id": "2.1",
}
]
},
];
const result = arr.flatMap(obj => [obj.id].concat(obj.options?.map(o => o.id) ?? []));
console.log(result);
另一個是
const arr = [
{
"id": "1",
},
{
"id": "2",
"options": [
{
"id": "2.1",
}
]
},
];
const toId = obj => obj.id;
const result = arr.map(toId).concat(arr.flatMap(o => o.options?.map(toId) ?? []));
console.log(result);
uj5u.com熱心網友回復:
這種通用方法將提取所有id
欄位,而無需指定結構(例如options
鍵):
const arr = [{"id":"1"},{"id":"2","options":[{"id":"2.1"}]}];
const f=o=>typeof o==='object'?Object.keys(o).flatMap(k=>k==='id'?[o[k]]:f(o[k])):[];
console.log(f(arr));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524777.html
上一篇:我怎樣才能擺脫這個TypeScript錯誤。這顯示了按鈕組件的樣式錯誤
下一篇:在打字稿中將陣列轉換為物件