【发布时间】:2020-02-17 22:07:39
【问题描述】:
尝试根据以下代码的某些逻辑过滤对象返回空数组,任何帮助将不胜感激尝试实现以下逻辑
1- 如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator = Y,acceptDigitalFirstFill=N)。这个对象应该被删除它的虚假。
2- 如果第一个 obj(firstFillIndicator=Y, acceptDigitalFirstFill=Y) 和第二个对象 (firstFillIndicator= N, acceptDigitalFirstFill=Y)。这个对象应该被删除它的虚假。
3- 如果两个对象都有 firstFillIndicator 并且 acceptDigitalFirstFill 有一些值是真实的。
main.ts
function validateSingleOrder(data){
let isValid = false;
const filteredDrugs = data.filter((item) => {
isValid = isValidOrder(item);
if(isValid){
return true;
} else {
return false;
}
})
return filteredDrugs;
}
function isValidOrder(item){
item.rxInfos.reduce((a, c) => {
return (a.acceptDigitalFirstFill === "Y" && c.firstFillIndicator === "Y") || (a.firstFillIndicator === "N" && c.acceptDigitalFirstFill === "N")
});
}
console.log(validateSingleOrder(rxDetails));
数据
const rxDetails = [
{
indexID: 1,
rxInfos: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "N",
rxNumber: "16021"
}
]
},
{
indexID: 2,
rxInfos: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "N",
acceptDigitalFirstFill: "Y",
rxNumber: "16021"
}
]
},
{
indexID: 3,
rxInfos: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "N",
acceptDigitalFirstFill: "N",
rxNumber: "16021"
}
]
}
]
预期结果
[{
indexID: 3
rxInfoss: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "N",
acceptDigitalFirstFill: "N",
rxNumber: "16021"
}
]
},
];
【问题讨论】:
-
不要使用reduce,这个用例不需要它。
-
isValidOrder()永远不会返回值,因此总是会计算为false。 -
为什么在这里使用
reduce?你 可以 但你也应该每次都为累加器返回一个值 - 你没有这样做。您只是一次比较两个对象,然后......就是这样。 -
尝试使用过滤器代替reduce
-
我真的很惊讶这不会引发错误。当您尝试取消引用
a的属性时,您应该得到它们的任何长度超过2,这将是一个布尔值。
标签: javascript typescript ecmascript-6 filter