我有以下代码
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 array 和 get 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
答案 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))
在最坏的情况下,这仅需要遍历数组一次,如果发现有问题,它将提早返回。