简体   繁体   中英

Looping through array of objects by object property

I have an array of objects with some information about a pop I am trying to fire. it looks like this:

[  
   {  
      "url":"www.fakeurl/redirect1",
      "providerName":"ebay",
      "retailerName":"eBay",
      "providerAndRetailer":"ebayeBay",
      "popAllowed":true
   },

   {  
      "url":"www.fakeurl/redirect2",
      "providerName":"pricerunner",
      "retailerName":"Currys",
      "providerAndRetailer":"pricerunnerCurrys",
      "popAllowed":true
   },
   {  
      "url":"www.fakeurl/redirect3",
      "providerName":"kelkoo",
      "retailerName":"Currys",
      "providerAndRetailer":"kelkooCurrys",
      "popAllowed":true
   },
   {  
      "url":"www.fakeurl/redirect4",
      "providerName":"ebay",
      "retailerName":"eBay",
      "providerAndRetailer":"ebayeBay",
      "popAllowed":true
   },
   {  
      "url":"www.fakeurl/redirect5",
      "providerName":"pricerunner",
      "retailerName":"Argos",
      "providerAndRetailer":"pricerunnerArgos",
      "popAllowed":true
   },
   {  
      "url":"www.fakeurl/redirect6",
      "providerName":"ebay",
      "retailerName":"eBay",
      "providerAndRetailer":"ebayeBay",
      "popAllowed":true
   },
   {  
      "url":"www.fakeurl/redirect7",
      "providerName":"ecn",
      "retailerName":"Argos",
      "providerAndRetailer":"ecnArgos",
      "popAllowed":true
   }
]

I also have a array of providers in which I would like the order to fire:

let acceptedProviders = ['ebay', 'connexity', 'ecn', 'kelkoo', 'nexttag', 'pricerunner', 'shopping'];

I would like to loop over my array in the order of my acceptedProviders. When a match is found with the "providerName" property in my object I want the loop to stop and add a property of "popAllowed": false, so then I can filter it out of the list. It would then loop again, still looking for the first name in my accepted providers array, if it doesnt find it, it moves onto the next until the list is exhausted. I have tried a for loop but I cant seem to get the results Im looking for. Any help much appreciated.

Just loop through the data and within each iteration set popAllowed by looking for that provider in accepted providers array

 let acceptedProviders = ['ebay', 'connexity', 'ecn', 'kelkoo', 'nexttag', 'pricerunner', 'shopping']; let data = get_data(); data.forEach((item)=>{ item.popAllowed = acceptedProviders.indexOf(item.providerName) === -1; }); console.log(data); function get_data() { return [{ "url": "www.fakeurl/redirect1", "providerName": "ebay", "retailerName": "eBay", "providerAndRetailer": "ebayeBay", "popAllowed": true }, { "url": "www.fakeurl/redirect2", "providerName": "pricerunner", "retailerName": "Currys", "providerAndRetailer": "pricerunnerCurrys", "popAllowed": true }, { "url": "www.fakeurl/redirect3", "providerName": "kelkoo", "retailerName": "Currys", "providerAndRetailer": "kelkooCurrys", "popAllowed": true }, { "url": "www.fakeurl/redirect4", "providerName": "ebay", "retailerName": "eBay", "providerAndRetailer": "ebayeBay", "popAllowed": true }, { "url": "www.fakeurl/redirect5", "providerName": "pricerunner", "retailerName": "Argos", "providerAndRetailer": "pricerunnerArgos", "popAllowed": true }, { "url": "www.fakeurl/redirect6", "providerName": "ebay", "retailerName": "eBay", "providerAndRetailer": "ebayeBay", "popAllowed": true }, { "url": "www.fakeurl/redirect7", "providerName": "ecn", "retailerName": "Argos", "providerAndRetailer": "ecnArgos", "popAllowed": true } ]; } //console.log(data) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM