Javascript 如何使用reduce从数组中删除元素?
尝试根据下面的一些逻辑过滤掉对象代码返回空数组。尝试实现下面的逻辑将非常感谢任何帮助 1-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=Y,acceptDigitalFirstFill=N)。这个物体应该去掉它的假发 2-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=N,acceptDigitalFirstFill=Y)。这个物体应该去掉它的假发 3-如果两个对象都有firstFillIndicator和acceptDigitalFirstFill,则它们的某些值将是真实的 梅因酒店Javascript 如何使用reduce从数组中删除元素?,javascript,typescript,ecmascript-6,filter,Javascript,Typescript,Ecmascript 6,Filter,尝试根据下面的一些逻辑过滤掉对象代码返回空数组。尝试实现下面的逻辑将非常感谢任何帮助 1-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=Y,acceptDigitalFirstFill=N)。这个物体应该去掉它的假发 2-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=N,
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));
资料
预期结果
[{
indexID: 3
rxInfoss: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "N",
acceptDigitalFirstFill: "N",
rxNumber: "16021"
}
]
},
];
问题是,
isValidOrder
函数在任何情况下都不会返回任何内容,使用类似于的东西。与使用。reduce(…)
相比,every(…)
更合适。在这种情况下,下面是一个示例:
const rxDetails=[{
indexID:1,
rxInfos:[{
第一个指示器:“Y”,
acceptDigitalFirstFill:“Y”,
RX编号:“1512”
},
{
第一个指示器:“Y”,
acceptDigitalFirstFill:“N”,
RX编号:“16021”
}
]
},
{
indexID:2,
rxInfos:[{
第一个指示器:“Y”,
acceptDigitalFirstFill:“Y”,
RX编号:“1512”
},
{
firstFillIndicator:“N”,
acceptDigitalFirstFill:“Y”,
RX编号:“16021”
}
]
},
{
indexID:3,
rxInfos:[{
第一个指示器:“Y”,
acceptDigitalFirstFill:“Y”,
RX编号:“1512”
},
{
firstFillIndicator:“N”,
acceptDigitalFirstFill:“N”,
RX编号:“16021”
}
]
}
];
const result=rxDetails.filter(o=>{
每(v=>{
返回(v.firstFillIndicator=='Y'和&v.acceptDigitalFirstFill=='Y')| |(v.firstFillIndicator=='N'和&v.acceptDigitalFirstFill=='N');
});
});
控制台日志(结果)
不要使用reduce,您在这个用例中不需要它。isValidOrder()
永远不会返回值,因此将始终计算为false
。为什么在这里使用reduce
?您可以,但每次都应该为累加器返回一个值-您没有这样做。你只是一次比较两个对象,就这样。试着用过滤器而不是还原。我真的很惊讶这不会引发错误。当您尝试从a
中取消对属性的引用时,您应该在2
上获取任意长度的属性,该属性将是一个布尔值。感谢您提供的示例,这正是我想要添加的内容,是否可以捕获已删除对象的indexID?@hussain您可以使用以下方式获取所有已删除对象:const removed=rxDetails.filter(o=>!result.some(v=>v.indexID==o.indexID))
,然后,您可以映射此数组以仅保留idconst id=removed.map(o=>o.indexID)
。
[{
indexID: 3
rxInfoss: [{
firstFillIndicator: "Y",
acceptDigitalFirstFill: "Y",
rxNumber: "1512"
},
{
firstFillIndicator: "N",
acceptDigitalFirstFill: "N",
rxNumber: "16021"
}
]
},
];