打印出现N次的第一个元素的值

时间:2018-02-19 15:06:06

标签: javascript arrays

所以我正在制作这个ReactJS应用程序。

过滤系统的一部分我有以下问题: 简化...

我有一个数组,让我们说它像let arr = [1,7,4,3,4,7];一样简单 我还从用户输入一个N变量,它是一个简单的整数输入。

我需要returnconsole.log()数组中重复N次的整数。如果没有非重复数字log err msg或返回-1;

例如,

let arr = [1,7,4,3,4,7];let n = 2;我得到7 - cos 7重复2次

let arr = [7,4,5,3,5,5,3,4,3,2,1];let n = 3;我得到5 - cos 5重复3次

let arr = [1,6,4,6,4,6];let n = 4;我得到-1cl("err") - 没有重复4次

评论代码:

const getRepeatingNumber = (arr, n) => {
    for (unit of arr) {
        if (unit === maj_unit) count++;
        else {
            count--;
            if (count === 0) {
                maj_unit = unit;
                count = 1;
            }
        }
    }
    return maj_unit;
}

2 个答案:

答案 0 :(得分:1)

你可以使用array#every,创建一个累加器并将数字作为键及其频率作为值,一旦值达到指定的出现次数,使用return false从循环中断,然后返回结果。



const getRepeatingNumber = (arr, count) => { 
  let result = -1, hash = {};
  arr.every(n => {
    hash[n] = (hash[n] || 0) + 1;
    if(hash[n] === count) {
      result = n;
      return false;
    }
    return true;
  }); 
  return result;
}
console.log(getRepeatingNumber([1,7,4,3,4,7],2));
console.log(getRepeatingNumber([7,4,5,3,5,5,3,4,3,2,1], 3));
console.log(getRepeatingNumber([1,6,4,6,4,6], 4));




答案 1 :(得分:0)

以下是我希望解决您问题的代码。 您需要遍历所有数组值并查找每个值发生的时间并保存结果数组中的出现次数,因为可能有多个值n次出现。即在您提供的数组中let arr = [1,7,4,3,4,7]; 7和4发生了两次,但我返回结果[0],因为您可能只需要n次出现的第一个值。

let arr = [1,7,4,3,4,7];

let getRepeatingNumber = function (arr, n) {
 let result = [];
 arr.forEach((value) => {
   if (arr.filter(val => val === value).length === n && !result.includes(value)) {
     result.push(value);
   }
 });
 return result.length ? result[0] : -1
}

console.log(getRepeatingNumber(arr, 2)); // 7