我有一個 JSON 陣列,如下所示。
[
{
id: 1,
name: 'Alex',
activity: [
{
id: 'A1',
status: true
},
{
id: 'A2',
status: true
},
{
id: 'A3',
status: false
}
]
},
{
id: 2,
name: 'John',
activity: [
{
id: 'A6',
status: true
},
{
id: 'A8',
status: false
},
{
id: 'A7',
status: false
}
]
}
]
我想獲取一個狀態應該為 true 的活動 id 陣列。我可以通過嵌套for或forEach回圈來實作這一點。但在這里,我希望借助 、 和 等陣列函式 filter來map實作some。
我已經嘗試過以下方法。
let newArr=arr.filter(a=> a.activity.filter(b=> b.status).map(c=> c.id))
但我沒有得到正確答案 預期輸出
['A1','A2','A6']
uj5u.com熱心網友回復:
function filter_activity(activities) {
return activities
&& activities.length
&& activities.map(x => x.activity)
.flat().filter(activity => activity.status)
.map(x => x.id) || [];
}
插圖
function filter_activity(activities) {
return activities &&
activities.length &&
activities.map(x => x.activity)
.flat().filter(activity => activity.status)
.map(x => x.id) || [];
}
const input = [{
id: 1,
name: 'Alex',
activity: [{
id: 'A1',
status: true
},
{
id: 'A2',
status: true
},
{
id: 'A3',
status: false
}
]
},
{
id: 2,
name: 'John',
activity: [{
id: 'A6',
status: true
},
{
id: 'A8',
status: false
},
{
id: 'A7',
status: false
}
]
}
];
console.log(filter_activity(input));
WYSIWYG=>WHAT YOU SHOW IS WHAT YOU GET
uj5u.com熱心網友回復:
let arr = json.flatMap(e => e.activity.filter(el => el.status).map(el => el.id))
uj5u.com熱心網友回復:
let newArr=arr.map(x => x.activity)
.reduce((acc, val) => acc.concat(val), [])
.filter((activity:any) => activity.status)
.map((x:any) => x.id) || [];
使用flat()and時出現錯誤flatMap()。所以,我使用了reduce().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/434343.html
