简体   繁体   English

按对象属性循环遍历对象数组

[英]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. 我想按我的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. 当在对象中找到与“ providerName”属性匹配的内容时,我希望循环停止并添加“ popAllowed”属性:false,因此可以将其从列表中过滤掉。 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. 我已经尝试过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 只需遍历数据并在每个迭代集中进行popAllowed(通过在可接受的提供程序数组中查找该提供程序)

 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) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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