如何找出一个值在数组中的频率?

时间:2019-06-23 08:27:19

标签: javascript arrays diagram

我有一个数组,其中包含值。现在,我想找出值重复的频率。

我已经计算了值并创建了一个新数组。但是现在我不想使用新的数组作为基础,因为我已经将图的圆放入第一个数组中(data [i] .circle),在这种情况下我也想使用它们。那么有什么方法可以使用旧数组并在图中显示一个值出现的频率?例如:数组中的1300次为3次。

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 :(得分:0)

  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]);