簡體   English   中英

如何根據屬性過濾掉項目?

[英]How to filter out item based on properties?

我想重構代碼使用過濾器而不是lodash _forEach,下面的過濾器代碼沒有返回預期的響應。 任何想法在這里實施錯誤?

main.js

 const response = []; const data = [{ "isBrand": true, "drugName": "Lipitor", "specialtyPrice": {} }, { "isBrand": false, "drugName": "Atorvastatin Calcium", "drugStrength": "80mg", "drugForm": "Tablet", "mailPrice": { "totalQuantity": 90, "rejectMessage": [{ "settlementCode": "99", "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)" }] }, "retailPrice": { "totalQuantity": 30, "rejectMessage": [{ "settlementCode": "99", "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)" }] }, "specialtyPrice": {} } ]; _.forEach(data, function(drug) { if (drug.retailPrice !== undefined || drug.mailPrice !== undefined) { response.push(drug); } }); const filterItems = data.filter(item => item.retailPrice && item.mailPrice) console.log(filterItems); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script> 

預期結果

[{
            "isBrand": false,
            "drugName": "Atorvastatin Calcium",
            "drugStrength": "80mg",
            "drugForm": "Tablet",
            "mailPrice": {
                "totalQuantity": 90,
                "rejectMessage": [{
                    "settlementCode": "99",
                    "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"
                }]
            },
            "retailPrice": {
                "totalQuantity": 30,
                "rejectMessage": [{
                    "settlementCode": "99",
                    "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"
                }]
            },
            "specialtyPrice": {}
        }
    ];

這應該工作。

var objNotEmpty = function(obj){
    return Object.keys(obj).length > 0;
 },
 objHasPrice = function(obj){
    return obj.hasOwnProperty("mailPrice") && obj.hasOwnProperty("retailPrice");
 };


const filterItems = data.filter( item => return objHasPrice(item) && objNotEmpty(item.mailPrice) && objNotEmpty(item.retailPrice);

您可以像這樣簡單地執行Array.forEach

data.forEach(d => (d.retailPrice || d.mailPrice) ? response.push(d) : null)

所以它看起來像這樣:

 const response = []; const data = [{ "isBrand": true, "drugName": "Lipitor", "specialtyPrice": {} }, { "isBrand": false, "drugName": "Atorvastatin Calcium", "drugStrength": "80mg", "drugForm": "Tablet", "mailPrice": { "totalQuantity": 90, "rejectMessage": [{ "settlementCode": "99", "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)" }] }, "retailPrice": { "totalQuantity": 30, "rejectMessage": [{ "settlementCode": "99", "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)" }] }, "specialtyPrice": {} } ]; data.forEach(d => (d.retailPrice || d.mailPrice) ? response.push(d) : null) const filterItems = data.filter(item => item.retailPrice && item.mailPrice) console.log(filterItems); 

暫無
暫無

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

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