我有一個非常復雜的 JSON 資料集,我設法通過serial_number. 然而,現在的障礙是,雖然它給了我預期的輸出,但它不是我非常期望的形式,因為我的印象是回傳的輸出只有一個匹配的陣列。但是,如果回傳的輸出是正確的,那么歡迎任何解釋。下面是 JSON 和代碼:
JSON
[
{
"district": "Kolkata",
"ward_no": [
{
"ward": "6",
"grievance": [
{
"serial_number": "0001",
"name" : "Mr.A"
},
{
"serial_number": "0002",
"name" : "Mr.B"
}
],
"general": [
{
"serial_number": "0003",
"name" : "Mr.C"
},
{
"serial_number": "0004",
"name" : "Mr.D"
}
]
},
{
"ward": "7",
"grievance": [
{
"serial_number": "0005",
"name" : "Mr.E"
},
{
"serial_number": "0006",
"name" : "Mr.F"
}
],
"general": [
{
"serial_number": "0007",
"name" : "Mr.G"
},
{
"serial_number": "0008",
"name" : "Mr.H"
}
]
}
]
},
{
"district": "Hooghly",
"ward_no": [
{
"ward": "8",
"grievance": [
{
"serial_number": "0009",
"name" : "Mr.I"
},
{
"serial_number": "0010",
"name" : "Mr.J"
}
],
"general": [
{
"serial_number": "0011",
"name" : "Mr.K"
},
{
"serial_number": "0012",
"name" : "Mr.L"
}
]
},
{
"ward": "9",
"grievance": [
{
"serial_number": "0013",
"name" : "Mr.M"
},
{
"serial_number": "0014",
"name" : "Mr.N"
}
],
"general": [
{
"serial_number": "0015",
"name" : "Mr.O"
},
{
"serial_number": "0018",
"name" : "Bruno Fernandes"
}
]
}
]
}
]
編碼
const query = {
serial_number : "0018"
};
const filterData = dummyData.map(value => value.ward_no.map(
value => {
if(value.grievance.filter(value => value.serial_number === query.serial_number)) {
return value.grievance.filter(value => value.serial_number === query.serial_number)
} else {
return value.general.filter(value => value.serial_number === query.serial_number)
}
}
));
console.log(filterData)
輸出當前不回傳任何內容:

根據我正在執行的查詢serial_number = 0018,我期望的輸出是
{
"serial_number": "0018",
"name" : "Bruno Fernandes"
}
我還想知道使用 map 方法是否能讓我遍歷上述屬性以便能夠在元素中顯示它們。
uj5u.com熱心網友回復:
您需要提取和展平grievanceandgeneral陣列 usingarray#flatMap然后過濾serial_numberusing array#filter。
const dummyData = [ { "district": "Kolkata", "ward_no": [ { "ward": "6", "grievance": [ { "serial_number": "0001", "name" : "Mr.A" }, { "serial_number": "0002", "name" : "Mr.B" } ], "general": [ { "serial_number": "0003", "name" : "Mr.C" }, { "serial_number": "0004", "name" : "Mr.D" } ] }, { "ward": "7", "grievance": [ { "serial_number": "0005", "name" : "Mr.E" }, { "serial_number": "0006", "name" : "Mr.F" } ], "general": [ { "serial_number": "0007", "name" : "Mr.G" }, { "serial_number": "0008", "name" : "Mr.H" } ] } ] },{ "district": "Hooghly", "ward_no": [ { "ward": "8", "grievance": [ { "serial_number": "0009", "name" : "Mr.I" }, { "serial_number": "0010", "name" : "Mr.J" } ], "general": [ { "serial_number": "0011", "name" : "Mr.K" }, { "serial_number": "0012", "name" : "Mr.L" } ] }, { "ward": "9", "grievance": [ { "serial_number": "0013", "name" : "Mr.M" }, { "serial_number": "0014", "name" : "Mr.N" } ], "general": [ { "serial_number": "0015", "name" : "Mr.O" }, { "serial_number": "0018", "name" : "Bruno Fernandes"} ] } ] } ],
query = { serial_number : "0018" },
filterData = dummyData
.flatMap(({ward_no}) => ward_no
.flatMap(o => ['grievance', 'general'].flatMap(k => o[k])))
.filter(o => o.serial_number === query.serial_number);
console.log(filterData)
uj5u.com熱心網友回復:
如果回傳的陣列長度大于零,您可以過濾嵌套部分并回傳其中任何一個部分。
您可以采用遞回方法并檢查每個陣列中是否有具有所需值的物件。
const
search = o => {
let result = [];
Object.entries(o).some(([k, v]) => {
if (k in query && query[k] === v) return result.push(o);
if (Array.isArray(v)) {
const temp = v.flatMap(search);
if (temp.length) return result.push(...v.flatMap(search));
}
});
return result;
},
data = [{ district: "Kolkata", ward_no: [{ ward: "6", grievance: [{ serial_number: "0001", name: "Mr.A" }, { serial_number: "0002", name: "Mr.B" }], general: [{ serial_number: "0003", name: "Mr.C" }, { serial_number: "0004", name: "Mr.D" }] }, { ward: "7", grievance: [{ serial_number: "0005", name: "Mr.E" }, { serial_number: "0006", name: "Mr.F" }], general: [{ serial_number: "0007", name: "Mr.G" }, { serial_number: "0008", name: "Mr.H" }] }] }, { district: "Hooghly", ward_no: [{ ward: "8", grievance: [{ serial_number: "0009", name: "Mr.I" }, { serial_number: "0010", name: "Mr.J" }], general: [{ serial_number: "0011", name: "Mr.K" }, { serial_number: "0012", name: "Mr.L" }] }, { ward: "9", grievance: [{ serial_number: "0013", name: "Mr.M" }, { serial_number: "0014", name: "Mr.N" }], general: [{ serial_number: "0015", name: "Mr.O" }, { serial_number: "0018", name: "Bruno Fernandes" }] }] }],
query = { serial_number : "0018" },
result = data.flatMap(search);
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367437.html
標籤:javascript
上一篇:操縱元素之間的間距
