[英]Filter object list using ids in an array in Jquery
我有一個對象列表,每個對象都有一個特定的代碼。 還有另一個包含這些特定代碼的數組,我想檢索與數組中的代碼匹配的所有對象。 我嘗試使用 grep 函數和 indexOf 方法,但沒有收到任何結果。 有人可以幫我弄這個嗎?
var selectedCodes = [2, 12, 15];
var objArray = [
{
"ItemID": "1",
"ItemName": "Name1",
"ItemCode": "1",
},
{
"ItemID": "2",
"ItemName": "Name2",
"ItemCode": "2",
},
{
"ItemID": "3",
"ItemName": "Name3",
"ItemCode": "10",
},
{
"ItemID": "4",
"ItemName": "Name4",
"ItemCode": "12",
},
{
"ItemID": "5",
"ItemName": "Name5",
"ItemCode": "15",
},
{
"ItemID": "6",
"ItemName": "Name6",
"ItemCode": "20",
}
];
根據上面的對象列表和數組,我只需要將 Name2、Name4、Name5 對象放入不同的列表中。 您可以在下面找到我為此使用的代碼。 但我沒有運氣
var selectedObjects = $.grep(objArray, function (e) {
return selectedCodes.indexOf(e.ItemCode) > -1;
});
對於O(n)
解決方案,首先構造一個鍵為代碼的對象,然后.map
selectedCodes
的代碼:
const objsByCode = {};
for (const item of objArray) {
objsByCode[item.ItemCode] = item;
}
const result = selectedCodes.map(code => objsByCode[code]);
var selectedCodes = [2, 12, 15]; var objArray = [{ "ItemID": "1", "ItemName": "Name1", "ItemCode": "1", }, { "ItemID": "2", "ItemName": "Name2", "ItemCode": "2", }, { "ItemID": "3", "ItemName": "Name3", "ItemCode": "10", }, { "ItemID": "4", "ItemName": "Name4", "ItemCode": "12", }, { "ItemID": "5", "ItemName": "Name5", "ItemCode": "15", }, { "ItemID": "6", "ItemName": "Name6", "ItemCode": "20", } ]; const objsByCode = {}; for (const item of objArray) { objsByCode[item.ItemCode] = item; } const result = selectedCodes.map(code => objsByCode[code]); console.log(result);
不需要像 jQuery 這樣的大庫來實現這種微不足道的東西。
給你一個解決方案
var selectedCodes = [2, 12, 15]; var objArray = [ { "ItemID": "1", "ItemName": "Name1", "ItemCode": "1", }, { "ItemID": "2", "ItemName": "Name2", "ItemCode": "2", }, { "ItemID": "3", "ItemName": "Name3", "ItemCode": "10", }, { "ItemID": "4", "ItemName": "Name4", "ItemCode": "12", }, { "ItemID": "5", "ItemName": "Name5", "ItemCode": "15", }, { "ItemID": "6", "ItemName": "Name6", "ItemCode": "20", } ]; var filteredData = objArray.filter(function(item) { return ( selectedCodes.indexOf(parseInt(item.ItemCode)) > -1 ); }); console.log(filteredData);
使用filter
過濾掉匹配的記錄。
參考: 過濾器文檔
const selectedObjects = objectArray.filter(
obj => selectedCodes.includes(Number(obj.ItemCode))
)
其實你可以通過簡單的修改來實現它:
var selectedObjects = $.grep(objArray, function (e) {
return selectedCodes.indexOf(e.ItemCode - 0) > -1;
});
您實際上是在將字符串與數字進行比較。 將 ItemCode 轉換為 Number 將解決它。
你可以用簡單的 for 循環邏輯來做。,
var selectedCodes = [2, 12, 15]; var objArray = [ { "ItemID": "1", "ItemName": "Name1", "ItemCode": "1", }, { "ItemID": "2", "ItemName": "Name2", "ItemCode": "2", }, { "ItemID": "3", "ItemName": "Name3", "ItemCode": "10", }, { "ItemID": "4", "ItemName": "Name4", "ItemCode": "12", }, { "ItemID": "5", "ItemName": "Name5", "ItemCode": "15", }, { "ItemID": "6", "ItemName": "Name6", "ItemCode": "20", } ]; var selectedArra=[]; for(var i=0;i<selectedCodes.length;i++){ for(var j=0;j<objArray.length;j++){ if(parseInt(objArray[j].ItemCode)==selectedCodes[i]){ selectedArra.push(objArray[j]) } } } console.log(selectedArra)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.