1
 const priceType = ['monthly', 'annual'];
 var discounts =[
                    {product: "A", monthlyDiscount : 15.0, monthlyMaxDiscount: 30.0, annualDiscount : 25.0, annualMaxDiscount : 20.0},
                    {product: "B", monthlyDiscount : 5.0, monthlyMaxDiscount: 20.0, annualDiscount : 40.0, annualMaxDiscount : 30.0}
                ]
                
 var exceedsDiscount; 

If any of my discount objects exceeds max discount I need to set the Boolean as true and stop checking other array items.

I used for loops and this works as expected :

 exceedsDiscount = false;
 angular.forEach(priceType, function(type){
       angular.forEach(discounts, function(discount){
           if(discount[`${type}Discount`] > discount[`${type}MaxDiscount`]){
               exceedsDiscount = true;
               return; 
           }

    });  

If I try to use the every and some arrow functions the outcome is not same. It randomly gives true or false. Any idea how I can do using without using two for loops?

exceedsDiscount = false;
    exceedsDiscount = priceType.every(type => discounts.some(discount =>{return discount[`${type}Discount`] > discount[`${type}MaxDiscount`];}));
1
  • 2
    Your first logic would correspond to some(... some(, not every(... some( Commented Jun 3, 2022 at 12:14

1 Answer 1

1

As noted by trincot in the comment, instead of .every(.... .some(...)), if one uses .some(... .some(...)) - the required result is obtained.

By 'some .. some' we refer to a scenario that there is "some" type for which there is "some" discount which is greater than maxDiscount.

Snippet below:

const priceType = ['monthly', 'annual'];
var discounts = [{
    product: "A",
    monthlyDiscount: 15.0,
    monthlyMaxDiscount: 30.0,
    annualDiscount: 25.0,
    annualMaxDiscount: 20.0
  },
  {
    product: "B",
    monthlyDiscount: 5.0,
    monthlyMaxDiscount: 20.0,
    annualDiscount: 40.0,
    annualMaxDiscount: 30.0
  }
];

const everySome = priceType.every(type => discounts.some(discount =>{return discount[`${type}Discount`] > discount[`${type}MaxDiscount`];}));;

const someSome = priceType.some(type => discounts.some(discount =>{return discount[`${type}Discount`] > discount[`${type}MaxDiscount`];}));

console.log(
  '\n.every(.. .some( returns: ', JSON.stringify(everySome),
  '\n.some(.. .some(  returns: ', JSON.stringify(someSome)
);

Sign up to request clarification or add additional context in comments.

3 Comments

Non related: the JSON on your profile page is not valid. You might want to improve on that ;-)
I just created a sample data while writing question.. Thanks :)
@trincot - got it. I just tried JSON.parse on my me.json and it failed. Fixed it with double-quote and wrapping it in back-ticks` and it worked. Now, just need update back to my profile. Thank you for sharing. :-)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.