簡體   English   中英

如何在javascript中過濾具有多個條件的數組?

[英]How to filter arrays with multiple conditions in javascript?

所以我的示例數組如下,

{
    "available": [
        {
            "AC": "false",
            "availableSeats": "18",
            "avlWindowSeats": "10",
            "bookable": "true",
            "nonAC": "true",
            "seater": "false",
            "sleeper": "true",
            "zeroCancellationTime": "0",
            "mTicketEnabled": "true"
        },
        {
            "AC": "false",
            "availableSeats": "18",
            "avlWindowSeats": "10",
            "bookable": "true",
            "nonAC": "true",
            "seater": "true",
            "sleeper": "true",
            "zeroCancellationTime": "0",
            "mTicketEnabled": "true"
        },
        ....
    ]
}

我的過濾數據如下,

var filters = {
            nonAC: [
                "true"
            ],
            seater: [
                "true"
            ],
            sleeper: [
                "true"
            ],
        };

我創建了一個查詢構建器,它有助於完成查詢!

buildFilter = (filter) => {
        let query = {};
        for (let keys in filter) {
            if ( (filter[keys].constructor === Object) || (filter[keys].constructor === Array && filter[keys].length > 0)) {
                query[keys] = filter[keys];
            }
        }
        return query;
    };

最后我的過濾功能如下,

filterData = (data, query) => {
        const filteredData = data.filter( (item) => {
            for (let key in query) {
                if (item[key] === undefined || !query[key].includes(item[key])) {
                    return false;
                }
            }
            return true;
        });
        return filteredData;
    };

如果您注意到我的過濾條件,它會說

seater: [
                "true"
            ],
            sleeper: [
                "true"
            ],

這顯然意味着如果座位和卧鋪是真的那么過濾它,但問題是我需要結果為“座位或卧鋪”所以,如果任何一個是真的,它應該過濾那個,

那么如何更改我接受作為座椅或卧鋪的過濾器功能。

結果應該給兩個數組作為結果而不是第二個單獨作為輸出!

如果filters器之一為true您可以獲取filters和過濾器的條目。

 const available = [{ AC: "false", availableSeats: "18", avlWindowSeats: "10", bookable: "true", nonAC: "true", seater: "false", sleeper: "true", zeroCancellationTime: "0", mTicketEnabled: "true" }, { AC: "false", availableSeats: "18", avlWindowSeats: "10", bookable: "true", nonAC: "true", seater: "true", sleeper: "true", zeroCancellationTime: "0", mTicketEnabled: "true" }], filters = { nonAC: ["true"], seater: ["true"], sleeper: ["true"] }, filterEntries = Object.entries(filters), result = available.filter(object => filterEntries.some(([key, values]) => values.includes(object[key])) ); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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