找到阵列的模式?使用Javascript

时间:2015-09-18 09:10:13

标签: javascript arrays

好的,我只知道如何从数组中获取一个模式.. 但是如果它们出现相同的次数,我想得到2,3或更多。 这是代码:

<script src="${pageContext.request.contextPath}/resources/js/my.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/menu.css" />

现在,如果我有var frequency = {}; // array of frequency. var maxFreq = 0; // holds the max frequency. for (var i in array) { frequency[array[i]] = (frequency[array[i]] || 0) + 1; // increment frequency. if (frequency[array[i]] > maxFreq) { // is this frequency > max so far ? maxFreq = frequency[array[i]]; // update max. mode = array[i]; // update result. } } 我得到array = [3, 8, 3, 6, 1, 2, 9];

但我正在寻找的是mode = 3; 我想获得array = [3, 6, 1, 9, 2, 3, 6, 6, 3, 1, -8, 7];

2 个答案:

答案 0 :(得分:0)

问题没有说明如何获取模式,但如果我们想要它们在数组中,我们可以像这样更改代码:

function getModes(array) {
  var frequency = {}; // array of frequency.
  var maxFreq = 0; // holds the max frequency.
  var modes = [];

  for (var i in array) {
    frequency[array[i]] = (frequency[array[i]] || 0) + 1; // increment frequency.

    if (frequency[array[i]] > maxFreq) { // is this frequency > max so far ?
      maxFreq = frequency[array[i]]; // update max.
    }
  }

  for (var k in frequency) {
    if (frequency[k] == maxFreq) {
      modes.push(k);
    }
  }

  return modes;
}

alert(getModes([3, 6, 1, 9, 2, 3, 6, 6, 3, 1, -8, 7]));

答案 1 :(得分:0)

function modeCount(data) {
  let modecount = [];
  let valueArr = [];
  let dataSet = new Set(data);
  for (const iterator of dataSet) {
    const filteredNum = data.filter((num) => iterator === num);
    modecount.push({
      mode: iterator,
      count: filteredNum.length
    });
  }

  modecount.sort((a, b) => {
    return b.count - a.count;
  });

  modecount.forEach(value => {
    if (value.count === modecount[0].count) {
      valueArr.push(value.mode);
    }
  });

  return valueArr;
}
let ages = [3, 6, 1, 9, 2, 3, 6, 6, 3, 1, -8, 7]
console.log(modeCount(ages));