如何遍历数字数组以查找数组中出现3次的第一个数字

时间:2019-07-17 01:50:13

标签: javascript arrays

我有以下代码

let range = [1,2,3];
let multiples = [1,2,3,4,5,6,2,4,6,3,6];

我想找到倍数数组中出现range.lenght次(3);

的第一个数字

我想从倍数[0]开始检查以倍数出现的次数,如果出现3次,我想返回倍数[0],如果小于3倍,我想检查多少次multiples [1]出现在倍数数组中。如果出现了3个倍数[1],我想返回倍数[1],否则我继续检查倍数[2],依此类推,直到找到一个出现3次的数字。在上面的代码中,我应该返回6。

我看过 How to count the number of certain element in an array?Idiomatically find the number of occurrences a given value has in an arrayget closest number out of array 其他研究,但尚未弄清楚。

我试图尽可能简化这个问题。但是,如果需要更多信息,则与freeCodeCamp上的this 挑战有关。我的代码在哪里

function smallestCommons(arr) {
  let sortArr = arr.sort((a, b) => a - b);
  console.log(sortArr);
  let range = [];
  for (let i = sortArr[0]; i <= sortArr[1]; i++) {
    range.push(i);
  }
  console.log("range = " + range);
  let maxNum = range.reduce( (a, b) => a * b);
  console.log("maxNum = " + maxNum);

  let multiples = [];
  for (let i = 0; i < maxNum; i++) {

    let j = 0;
    do {
      multiples.push(j + range[i]);
      j += range[i];
    } while (j < maxNum);
    //j = 0;

  }
  for (let i = 0; i < multiples.length; i++) {
    let numberToFind = multiples[i];
   /*stuck here hence my question, maybe I shouldn't even start with a for loop*/ 
   //tried reduce, forEach, filter, while loop, do while loop 
  }
  console.log("multiples = " + multiples);


 }
console.log(smallestCommons([1,3]));

日志是

1,3
range = 1,2,3
maxNum = 6
multiples = 1,2,3,4,5,6,2,4,6,3,6,NaN,NaN,NaN

2 个答案:

答案 0 :(得分:0)

您可以做的是,首先用,分割字符串,然后使用下面的函数循环进行检查。

function countLength(arr, checkNumber) {
    var count = 0;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === checkNumber) {
            count++;
        }
    }
    return count;
}

countLength(list, NUMBER YOU WANT TO CHECK);

如果您要检查第一个数字出现3次,则需要更改功能并在操作中引入.map.filter来对数字进行计数。

示例

const multiples = [1,2,3,4,5,6,2,4,6,3,6];
let occurance_arr=[]; 

const aCount =  [...new Set(multiples)].map(x => {
    if(multiples.filter(y=> y==x).length == 3) {
        occurance_arr.push(x);
    }
});

console.log(occurance_arr);

上面的代码将在控制台中为您提供6,如果您有多个值,那么您正在寻找第0个元素,这是该项目的前3次出现。

答案 1 :(得分:0)

您可以遍历列表,保留一个对象,该对象将每个数字映射到您看到它的次数。您可以在循环时检查counts对象,因此,如果您看到一个数字,并且该计数比目标小一个,则可以将其返回。如果您在循环中返回但没有返回结果,则找不到您要的内容,请返回一个明智的方法:

let range = [1,2,3]
let multiples = [1,2,3,4,5,6,2,4,6,3,6]

function findFirstMult(arr, len){
    let counts = {}                         // to keep track of how many times you've seen something
    for (let n of arr){                     // loop throught the array
        if (!counts[n]) counts[n] = 0       // if it's then first time you've seen n, defined that key
        if (counts[n] == len - 1) return n  // found it
        counts[n] +=1                       // otherwise increase the count
    }
    return undefined
}

console.log(findFirstMult(multiples, range.length))

在最坏的情况下,这仅需要遍历数组一次,如果发现有问题,它将提早返回。