Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用reduce从数组中删除元素?_Javascript_Typescript_Ecmascript 6_Filter - Fatal编程技术网

Javascript 如何使用reduce从数组中删除元素?

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,

尝试根据下面的一些逻辑过滤掉对象代码返回空数组。尝试实现下面的逻辑将非常感谢任何帮助

1-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=Y,acceptDigitalFirstFill=N)。这个物体应该去掉它的假发

2-如果第一个对象(firstFillIndicator=Y,acceptDigitalFirstFill=Y)和第二个对象(firstFillIndicator=N,acceptDigitalFirstFill=Y)。这个物体应该去掉它的假发

3-如果两个对象都有firstFillIndicator和acceptDigitalFirstFill,则它们的某些值将是真实的

梅因酒店

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))
,然后,您可以映射此数组以仅保留id
const id=removed.map(o=>o.indexID)
[{
        indexID: 3
        rxInfoss: [{
                firstFillIndicator: "Y",
                acceptDigitalFirstFill: "Y",
                rxNumber: "1512"
            },
            {
                firstFillIndicator: "N",
                acceptDigitalFirstFill: "N",
                rxNumber: "16021"

            }
        ]
    },

];