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