Поиск повторяющихся значений и количества их повторений в javascript - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь создать n массивов в новом массиве (множественные массивы).Следующий шаг - найти дубликаты в этом множественном массиве и сколько раз они повторяются.Я использую 2 функции.Первый - создать основной массив из 35 чисел из 48 чисел.Вторая функция собирает все эти массивы в один массив.

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 голосов
/ 09 февраля 2019
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);
0 голосов
/ 09 февраля 2019

Код с комментариями:

// 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);
...