在JavaScript中查找重复的值及其重复次数

时间:2019-02-09 13:39:42

标签: javascript duplicates

我试图在一个新数组(multipleArrays)中创建n个数组。下一步是在那个multiArrays中查找重复项,并重复多少次。我正在使用2个功能。第一个是用48个数字中的35个数字创建主数组。第二个功能是将所有这些数组收集到一个数组中。

function createArray35() {
const array35 = [];
i = 0;
do {
    var rng = Math.floor(Math.random() * 48) + 1;
    if (!array35.includes(rng)) {
        array35.push(rng);
        i++;
    }
}
while (i < 35)
return array35
}
createArray35();


function multipleArray(total_number) {
var arrayOfArrays = [];
for (z = 0; z <= total_number; z++) {
    var array35 = createArray35();

    arrayOfArrays.push(niz35)

}
return arrayOfArrays;
}
var total_arrays = 3; // total number of "array35" I want to ceate in 
                  // "multipleArray"
console.log(multipleArray(arrayOfArrays));

预期结果应该是:

  1. 数字1重复(n)次;
  2. 数字2重复(n)次;
  3. ...
  4. ...
  5. 数字47重复(n)次
  6. 数字48重复(n)次

谢谢大家

2 个答案:

答案 0 :(得分:0)

带注释的代码:

// This method of getting X unique numbers from Y set is recommended, because it has a stable execution time
function createArray35() {
  // create a [1 .... 48] array
  var candidates = Array.from({
    length: 48
  }).map((el, index) => index + 1);

  var array35 = [];
  for (var i = 0; i < 35; i++) {
    // remove 1 random number from candidates
    const positionToRemove = Math.floor(Math.random() * candidates.length);
    const randomNum = candidates.splice(
      positionToRemove,
      1
    )[0];

    array35.push(randomNum);
  }
  return array35
}

function multipleArray(total_number) {
  var arrayOfArrays = Array.from({
    length: total_number
  }).map(el => createArray35());

  return arrayOfArrays;
}

function countDuplicates(arrayOfArrays) {
  // Create an array of length 48 where each element is 0;
  var counters = Array.from({
    length: 48
  }).map(el => 0);

  // Each time a number appear, increase its corresponding counter by 1
  for (var array of arrayOfArrays) {
    for (var number of array) {
      counters[number - 1] = counters[number - 1] + 1;
    }
  }

  for (var i = 0; i < counters.length; i++) {
    console.log(`Number ${i+1} is repeated ${counters[i]} times;`);
  }
}

var total_arrays = 3;
var arrayOfArrays = multipleArray(total_arrays);

console.log(arrayOfArrays);

countDuplicates(arrayOfArrays);

答案 1 :(得分:0)

function createArray35() {
    const array35 = [];
    i = 0;
    do {
        var rng = Math.floor(Math.random() * 48) + 1;
        if (!array35.includes(rng)) {
            array35.push(rng);
            i++;
        }
    }
    while (i < 35)
    return array35;
    }

function CalculateCount(array){
    var result = {};
    for(let i=0;i<array.length;i++){
        var obj = array[i].toString();
       if(result[obj]){
           result[obj] = result[obj]+1;
       }
       else{
        result[obj] = 1;
       }
    }
    return result;
}

function PrintResult(result){
    for(var i in result){
        console.log(`Number ${i} is repeated (${result[i]}) times;`);
    }
}

var resultObject = CalculateCount(createArray35());
PrintResult(resultObject);