Как я могу узнать, как часто одно значение находится в массиве? - PullRequest
0 голосов
/ 23 июня 2019

У меня есть массив, в котором находятся значения. Теперь я хочу узнать, как часто значения повторяются.

Я уже посчитал значения и создал новый массив. Но теперь я не хочу использовать новый массив в качестве базового, поскольку я поместил круги для диаграммы в первый массив (data [i] .circle), и я хотел бы использовать их и в этом случае. Так есть ли способ, где я могу использовать старый массив и показать на диаграмме, как часто появляется одно значение? Например: 1300 находится в массиве три раза.

init();

function init() {
  paper = Snap("#svgContainer");

  for (i = 0; i < data.length; i++) {
    data[i].circle = paper.circle(0, 0, 1);
  }
}

function showDiagram() {
  var diagrammBreite = data.length * radius * 4;
  var offsetLeft = (paperWidth - diagrammBreite) / 2;
  radius = (diagrammBreite / data.length) / 4;

  for (i = 0; i < data.length; i++) {
    xPos = offsetLeft + (4 * radius * i);

    for (j = 0; j < data[i]; j++) {
      yPos = paperHeight - (j * radius * 3) - radius;
      data[i].circle.attr({
        cx: xPos,
        cy: yPos,
        r: radius,
        color: farbe
      })
    }
  }
}

//one example out of my data array
var data = [{
  "country": "Germany",
  "lastEruption": 1300,
}]

1 Ответ

0 голосов
/ 23 июня 2019
  1. подсчитывает цены для нового объекта «словарь», используя каждое уникальное значение в качестве ключа:

    { «1300»: 3, "1200": 1, }

  2. обновить исходный массив счетчиками из словаря.

var data = [
{
  "country": "Germany",
  "lastEruption": 1300,
},
{
  "country": "France",
  "lastEruption": 1300,
},
{
  "country": "Italy",
  "lastEruption": 1100,
},
];

// count
const counts = {};
data.forEach(el => {
  const value = el.lastEruption;
  if (counts[value]) counts[value]++;
  else counts[value] = 1;
});

// update
data.forEach(el => el.circle = counts[el.lastEruption]);
...