Home > Mobile >  Grab multiple properties of a JSON
Grab multiple properties of a JSON

Time:02-23

I'm working with a large JSON file that looks like this:

{
    "name": "Superproduct",
    "description": "Enjoy this amazing product.",
    "brand": "ACME",
    "categories": [
      "Ball",
      "Soccer Ball",
      "Beach Ball"
    ],
    "type": "Online product",
    "price": 50,
    "price_range": "50 - 100",
    "image": "someImageURL",
    "url": "SomeProductURL",
    "free_shipping": true,
    "popularity": 10000,
    "rating": 2,
    "objectID": "1234"
  }

I am trying to access every object with the Ball category, so that I can add a discount to that specific item. I realized that every object can have multiple variations of the word Ball in the category array.

Is there a way I can target the word ball in the array, so that I can add that to an array and apply the discount to every product with said criteria?

This is what I have so far, but I'm not sure if this is the best way, or if there's a better way to accomplish what I'm trying to do:

async function setDiscount() {

    let discountedRate = 0.5;
    
    fetch('products.json')
    .then(res => res.json())
    .then(data => {for (let i = 0; i < data.length; i  ) {
        if (data[i].categories[i] == "Ball") {
            data[i].price -= (data[i].price * discountedRate);
        }
    }});

    
}

setDiscount();

P.S.: I'm a newbie.

CodePudding user response:

You can simply achieve this by iterating the response array.

Working Demo :

const data = [{
  "name": "Superproduct",
  "description": "Enjoy this amazing product.",
  "brand": "ACME",
  "categories": [
    "Ball",
    "Soccer Ball",
    "Beach Ball"
  ],
  "type": "Online product",
  "price": 50,
  "price_range": "50 - 100",
  "image": "someImageURL",
  "url": "SomeProductURL",
  "free_shipping": true,
  "popularity": 10000,
  "rating": 2,
  "objectID": "1234"
}];

const discountedRate = 0.5;

data.forEach((obj) => {
    obj.price = obj.categories.includes('Ball') ? (obj.price * discountedRate) : obj.price
});

console.log(data);

  • Related