我试图显示来自一个api中存在的客户的优惠券。如果一个(或' n')优惠券存在于另一个计算所用优惠券的API中,我必须从列表中删除所使用的优惠券。使用过的优惠券的api响应如下:
{
"State": 200,
"Response": [
{
"IdInvoiceRequest": 104,
"Coupons": [
{
"IdCoupon": 77236,
"Code": "11#E5ZQHZ-GNH"
},
{
"IdCoupon": 77237,
"Code": "12#WM96FY-NGE"
},
{
"IdCoupon": 77239,
"Code": "14#BH92BA-E6N"
},
{
"IdCoupon": 77240,
"Code": "15#FWXNR4-XHP"
},
{
"IdCoupon": 77241,
"Code": "16#7FK5F8-TKM"
}
]
},
{
"IdInvoiceRequest": 143,
"Coupons": [
{
"IdCoupon": 77238,
"Code": "13#BN5MZB-VJ9"
}
]
}
],
"Message": "Informacion correcta",
"TotalRows": 0,
"IsCorrect": true}
当我尝试消除使用过的优惠券时出现问题。到目前为止我的代码:
function validExist() {
vm.getSelected =
couponExist.get({
idOrder: vm.idOrder
}).$promise.then(function(data) {
for (var i = 0; i < data.Response.length; i++) {
data.Response[i].Select = vm.exist;
console.log(vm.exist);
}
vm.otherF = vm.coupons
for (var i = 0; i < data.Response.length; i++) {
data.Response[i].Select = vm.isHere;
console.log(vm.isHere);
}
if (vm.exist == vm.isHere) {
vm.coupons.splice(vm.coupons.IdCoupon, i++);
};
});
}
当拼接行为时,只消除第一张优惠券,但其他优惠券仍然相同,即使所有优惠券都在使用过的优惠券列表中。如何删除所有优惠券?我听说过这样做的方法是使用&#39; forEach&#39; o一些&#39; for&#39;,但我没有看到光(叹息)。
你能帮助我吗?
提前完成。
答案 0 :(得分:0)
让我们为您要解决的问题的概念性定义添加一些清晰度,然后选择实际的编程实现。
您似乎有2个列表,目标是删除第一个列表中存在于第二个列表中的所有条目。解决此问题的一种可能且相当直接的解决方案是创建第三个空列表,然后使用2个for
迭代循环(第一个列表的外部和第二个列表的内部)动态地仅添加第一个列表中的条目,在第二个中不存在。除了明显的简单性之外,这种方法还将提供接近最佳的计算性能。
希望这可能会有所帮助。
答案 1 :(得分:0)
Array.prototype.splice
获取一个起始索引和要从数组中删除的项目数。我不确定你的代码的其他部分应该做什么,但这里有一个例子,说明你如何从一个数组中查找项目并从第二个数组中删除它们:<\ n / p>
var existingCoupons = [
{ IdCoupon: 111 },
{ IdCoupon: 222 },
{ IdCoupon: 333 },
{ IdCoupon: 444 },
{ IdCoupon: 555 }
];
var simulatedResponse = [{
IdInvoiceRequest: "abc",
Coupons: [
{ IdCoupon: 222 },
{ IdCoupon: 444 }
]
},{
IdInvoiceRequest: "def",
Coupons: [
{ IdCoupon: 555 }
]
}];
//Loop through the invoices in the response
for(var i=0; i<simulatedResponse.length; i++){
//Loop through the coupons in the invoice
for(var j=0; j<simulatedResponse[i].Coupons.length; j++){
//Loop through the existing coupons
for(var k=0; k<existingCoupons.length; k++){
//If the unique identifier matches...
if(existingCoupons[k].IdCoupon == simulatedResponse[i].Coupons[j].IdCoupon){
//Splice one existing coupon out of the array at the current index
existingCoupons.splice(k, 1);
break;
}
}
}
}
console.log(existingCoupons)
&#13;