簡體   English   中英

使用 Jquery 數組中的 id 過濾對象列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM