我想過濾掉資料。我想檢查是否data1找到了資料data2并檢查它是否有錯誤訊息。請在下面檢查我的代碼。有沒有更好的方法來做到這一點?
資料1
[
{
"ids": "0111",
},
{
"ids": "0222",
},
{
"ids": "0333",
}
]
資料2
[
{
"id": "0111",
"errorMessages": [
{
"message": ["sample error message 1"]
}
]
},
{
"id": "0333",
"errorMessages": []
}
]
代碼
const output= data1.filter(
(element) => element.ids === data2.find((data) => data).id
);
console.log("output", output);
uj5u.com熱心網友回復:
.find((data) => data) 沒有做任何有用的事情 - 陣列中的每個專案都是一個物件,它是真實的,因此它將始終回傳陣列中的第一個元素。
如果你確實想.find其他的陣列中的匹配元素-那么更好的辦法是制定一套的ID其他陣列中發現的首臺(套查找快得多- O(1)-不是.find,這是O(n))。
您還需要實作檢查 是否errorMessages為空的邏輯。
const data1=[{id:"0111"},{id:"0222"},{id:"0333"}],data2=[{id:"0111",errorMessages:[{message:["sample error message 1"]}]},{id:"0333",errorMessages:[]}];
const ids = new Set(
data2
.filter(item => item.errorMessages.length)
.map(item => item.id)
);
const output= data1.filter(
element => ids.has(element.id)
);
console.log("output", output);
uj5u.com熱心網友回復:
沒有設定,但使用物件作為映射。
const IDKeys = {};
data2.forEach(data => {
if (data.errorMessages.length){
IDKeys[data.id] = true; // means valid
}
})
const filteredArray = data1.filter(data => IDKeys[data.id]);
這將只是 O(n) 因為訪問物件上的鍵是 O(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360486.html
