Удалите все до запятой из вывода отсортированного массива - PullRequest
0 голосов
/ 26 мая 2020

Вот мой код. На выходе получается "Bothell, 4". Что я могу сделать, чтобы на выходе получилось "Bothell" без запятой и счетчика?

let As = document.getElementsByTagName('a');

let towns = new Map();

for(let a of As)
{
  let town = a.textContent.split(',')[1].trim()
  if(towns.has(town))
  {
    towns.set(town, towns.get(town)+1) 
  }
  else
  {
    towns.set(town, 1);
  }
}

let most = [...towns.entries()].sort((a, b) => b[1] - a[1])[0]

console.log(most);
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bellevue</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Kirkland</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Monroe</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Большинство [0] исправили бы ваш код.

Изменено только для отслеживания максимального количества.

let As = document.getElementsByTagName('a');

let towns = new Map();
let max = [];

for(let a of As)
{
  let town = a.textContent.split(',')[1].trim()
  if(towns.has(town))
  {
    const count = towns.get(town)+1;
    towns.set(town, count);
    max[count] = town;
  }
  else
  {
    towns.set(town, 1);
    max[1] = town;
  }
}

let most = max.pop()

console.log(most);
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bellevue</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Kirkland</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Monroe</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
0 голосов
/ 26 мая 2020

[...towns.entries()] - это массив массива (2). Просто выберите первый элемент первого отсортированного элемента. Кстати, вам не нужна часть entries, просто разложите Map на Array.

В качестве альтернативы вы можете использовать редуктор для создания таблицы частот, включенной в фрагмент te.

let towns = new Map();

document.querySelectorAll('a').forEach(href => {
  const town = href.textContent.split(',')[1].trim();
  if(towns.has(town)) {
    towns.set(town, towns.get(town)+1) 
  } else {
    towns.set(town, 1);
  }
});

const most = [...towns].sort((a, b) => b[1] - a[1])[0][0];
//                                                    ^ here
console.log(most);

// alternative use reduce to create a frequency table
const freqs = [...document.querySelectorAll('a')]
 .reduce( (acc, val) => {
   const town = val.textContent.split(',')[1].trim();
   return {...acc, [town]: acc[town] ? acc[town] + 1 : 1 };
  }, {});
// now you need entries ;)
console.log(Object.entries(freqs).sort( (a, b) => b[1] - a[1] )[0][0]);
a {display: block}
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bellevue</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Kirkland</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Monroe</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
<a href="/search/details/50/1/" class="address">9207 Odin Wy, Bothell</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...