You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS应用过滤系统需求:查找数组中出现N次的首个元素

解决ReactJS过滤系统中查找重复N次整数的问题

嘿,我来帮你搞定这个React过滤模块的问题!针对你提出的需求——从给定数组中找出恰好重复N次的整数,不存在则返回-1或打印错误信息,这里有清晰的实现思路和代码示例:

核心思路

  1. 统计数字出现次数:先用reduce遍历数组,生成一个记录每个数字出现次数的映射表。
  2. 筛选符合条件的数字:从映射表中筛选出出现次数恰好等于N的数字。
  3. 处理结果:如果有符合条件的数字,返回(或输出)结果;如果没有,返回-1并打印错误信息。

基础JavaScript实现(可直接在React中复用)

function findNumberWithTargetOccurrences(arr, targetN) {
  // 统计每个数字的出现次数
  const countMap = arr.reduce((acc, currentNum) => {
    acc[currentNum] = (acc[currentNum] || 0) + 1;
    return acc;
  }, {});

  // 筛选出出现次数等于targetN的数字,转成数字类型
  const matchedNumbers = Object.keys(countMap)
    .filter(key => countMap[key] === targetN)
    .map(Number);

  // 处理结果逻辑
  if (matchedNumbers.length === 0) {
    console.error(`⚠️ 不存在重复${targetN}次的整数`);
    return -1;
  }

  // 这里返回第一个符合条件的数字,若需要返回所有符合的,直接返回matchedNumbers数组即可
  return matchedNumbers[0];
}

// 测试你的示例
const testArr = [1,7,4,3,4,7];
console.log(findNumberWithTargetOccurrences(testArr, 2)); // 输出7(和你的示例一致)

在React组件中集成

如果你要在React组件里结合用户输入来使用这个功能,这里有一个完整的组件示例:

import { useState } from 'react';

function NumberFilter() {
  // 定义状态:用户输入的N、结果展示
  const [inputN, setInputN] = useState('');
  const [filterResult, setFilterResult] = useState(null);
  // 你的目标数组
  const targetArray = [1,7,4,3,4,7];

  const handleSearch = () => {
    // 先验证输入是否为有效整数
    const n = parseInt(inputN, 10);
    if (isNaN(n)) {
      setFilterResult('请输入有效的整数哦');
      console.error('输入无效:请输入整数');
      return;
    }

    // 调用统计筛选逻辑
    const countMap = targetArray.reduce((acc, num) => {
      acc[num] = (acc[num] || 0) + 1;
      return acc;
    }, {});

    const matched = Object.keys(countMap)
      .filter(key => countMap[key] === n)
      .map(Number);

    // 更新结果状态
    if (matched.length === 0) {
      setFilterResult(`没有找到重复${n}次的整数`);
      console.error(`没有找到重复${n}次的整数`);
    } else {
      // 若需要展示所有符合的数字,改成`matched.join(', ')`即可
      setFilterResult(`找到结果:${matched[0]}`);
    }
  };

  return (
    <div style={{ padding: '20px' }}>
      <h3>查找重复N次的整数</h3>
      <input
        type="number"
        value={inputN}
        onChange={(e) => setInputN(e.target.value)}
        placeholder="输入整数N"
        style={{ padding: '8px', marginRight: '10px' }}
      />
      <button onClick={handleSearch} style={{ padding: '8px 16px' }}>
        开始查找
      </button>
      {filterResult && <p style={{ marginTop: '15px' }}>{filterResult}</p>}
    </div>
  );
}

export default NumberFilter;

补充说明

  • 如果你的需求是返回所有重复N次的数字,只需要把代码中返回matchedNumbers[0]的地方改成直接返回matchedNumbers数组即可(比如示例中N=2时会返回[7,4])。
  • 代码里已经处理了输入非整数的边界情况,避免出现逻辑错误。
  • 对于空数组、N为0或大于数组长度的极端情况,代码也会正确返回-1并打印错误信息。

内容的提问来源于stack exchange,提问作者Георги Димитранов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:05:26