-3

I am having an array for which i m calculating the count of every unique array element. array is stored as arr after that i have used a created a function to calculate the values of all uniques.

<script>
var arr = [ '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  ]
arr1 = arr.sort()
var uniqs = arr1.reduce((acc, val) => {
  acc[val] = acc[val] === undefined ? 1 : acc[val] += 1;
  return acc;
}, {});
console.log(uniqs)

</script>

what i get

<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>: 1
<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>: 11
<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>: 1
<a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a>: 1
<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>: 3

and i want something like this

Web Client: 1 Android: 11 iPhone: 1 Facebook: 1 Web App: 3

2 Answers2

0

While HTML is not a regular language (see meme-ish reference here: RegEx match open tags except XHTML self-contained tags), from those short tags you can really extract what you want using regex:

var arr = [ '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
  '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  ];
  
arr.forEach(function(tag){
  console.log(tag);
  console.log(tag.match(/<a.*>(Twitter )?(for )?(.*)<\/a>/)[3]);
});

(match() produces an array, containing the entire match in [0], and the groups in parentheses, so [1] is for Twitter and [2] is for for, or undefined when they are not present, and [3] is what you need).

tevemadar
  • 12,389
  • 3
  • 21
  • 49
0

With respect to your initial question( assuming queries stored in an object) you can do something like

var object = {'<a href="http://kaptaankohli.com" rel="nofollow">The Gujarat Lions FC</a>': 15,'<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>': 1};


for (var key in object) {
if (object.hasOwnProperty(key)) {
    var regex = /\>(.*?)\</;
var matched = regex.exec(key);
console.log(matched[1]);
//insert matched[1], object[key] into a new object
}
};