我有 2 個陣列,一個是“searchEachIndex”,另一個是“data”。
基于“searchEachIndex”陣列,我想過濾“data”陣列。IE,
在 searchEachIndex 陣列中,我有 123 個值與資料陣列的 employeeId 匹配。
應該將物件推入 res 陣列 { id: 2,employeeId:123 }, { id:3,employeeId:123 },如果兩個值匹配。否則將此處不匹配的 searchEachIndex 值 1234、12 推入另一個陣列,即 noData 陣列。
let searchEachIndex = [123, 1234, 12]
let data = [
{
id: 1,
employeId: 121
},
{
id: 2,
employeId: 123
},
{
id: 3,
employeId: 123
}
];
let res=[];
let noData = [];
searchEachIndex.forEach(val => {
data.map(item => {
if(item.employeId === val) {
res.push(item)
}
})
})
console.log('Both emp id and searchEachIndex value matched array', res);
consolelog('Ids not found array', noData);
實際上我需要如下回應: res : [{ id: 2, employeeId: 123 }, { id: 3,employeeId: 123 }] 和 noData : [1234, 12]
uj5u.com熱心網友回復:
您可以用.mapwith替換,.forEach因為您不需要回傳轉換后的陣列,而只是在尋找 for 回圈。
您還可以保留一個布爾標志,讓您知道當前陣列中val是否有相應的條目data。這樣你就可以推(/不推)到你的noData陣列中。
建立在您的代碼上:
let searchEachIndex = [123, 1234, 12]
let data = [
{
id: 1,
employeId: 121
},
{
id: 2,
employeId: 123
},
{
id: 3,
employeId: 123
}
];
let res=[];
let noData = [];
searchEachIndex.forEach(val => {
let found = false;
data.forEach(item => {
if(item.employeId === val) {
found = true;
res.push(item)
}
})
if(!found) noData.push(val);
})
console.log('Both emp id and searchEachIndex value matched array', res);
console.log('Ids not found array', noData);
uj5u.com熱心網友回復:
您可以使用一個物件來跟蹤使用的值并過濾陣列。
const
search = [123, 1234, 12],
used = Object.fromEntries(search.map(k => [k, false])),
data = [{ id: 1, employeId: 121 }, { id: 2, employeId: 123 }, { id: 3, employeId: 123 }],
result = data.filter(({ employeId }) => {
if (employeId in used) return used[employeId] = true;
}),
noData = search.filter(k => !used[k]);
console.log(noData);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420720.html
標籤:
