我的資料如下所示:
{
FL: [{ID: 1, confirmed: true},{ID: 2, confirmed: false}],
TX: [{ID: 3, confirmed: true}],
NY: [{ID: 4, confirmed: false}, {ID: 5, confirmed: true}]
}
而且我需要能夠遍歷此資料中的每個專案,找到 ID === 已知 ID 的人。我不確定解決這個問題的最佳方法。
我唯一能想到的是一個 for-In 回圈,但 Id 必須在回圈物件后映射陣列,這樣看起來不是很干凈。
是否有任何方法可以干凈地處理對如此深度嵌套的資料的迭代?
uj5u.com熱心網友回復:
Array.prototype.find幫助人們在陣列中查找物件,并將Object.values物件的所有值作為陣列回傳,而Array.prototype.flat有助于展平陣列陣列。
下面的實作還使用了一個箭頭函式運算式作為find回呼函式以及一個destructuring_assignment,該函式用于從作為引數傳遞給回呼的物件中解包欄位。
function findObjectByID(obj, id) {
return Object
.values(obj)
.flat()
.find(({ ID }) => ID === id);
}
const sampleData = {
FL: [{ ID: 1, confirmed: true }, { ID: 2, confirmed: false }],
TX: [{ ID: 3, confirmed: true }],
NY: [{ ID: 4, confirmed: false }, { ID: 5, confirmed: true }],
};
console.log(
'findObjectByID(sampleData, 2) ...',
findObjectByID(sampleData, 2)
);
console.log(
'findObjectByID(sampleData, 3) ...',
findObjectByID(sampleData, 3)
);
console.log(
'findObjectByID(sampleData, 5) ...',
findObjectByID(sampleData, 5)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
uj5u.com熱心網友回復:
這是一種保留密鑰并回傳匹配項的方法。
let obj = {
FL: [{ID: 1, confirmed: true},{ID: 2, confirmed: false}],
TX: [{ID: 3, confirmed: true}],
NY: [{ID: 4, confirmed: false}, {ID: 5, confirmed: true}]
}
const findFromId = (obj, id) => {
for (let x in obj) {
if (res = obj[x].find(a => a.ID == id)) return { [x]: res }
}
return null;
}
console.log(findFromId(obj, 5))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408513.html
標籤:
