If statement 如何防止在React中的列表中添加重复项?

If statement 如何防止在React中的列表中添加重复项?,if-statement,react-hooks,If Statement,React Hooks,各位知识渊博、才华横溢的SO会员您好:) 我希望你也能帮我做这件事。我希望做以下工作: 提交时检查项目是否已在列表中 如果是,则显示警报,而不是添加 如果没有,请将该项目添加到列表中 在网上搜索之后,我找到了以下代码 const submitHandler=(e)=>{ e、 预防默认值(); const newScorer=e.target.value; const existingScorer=players.includes(newScorer); if(现有记分员){ log('已在列表

各位知识渊博、才华横溢的SO会员您好:)

我希望你也能帮我做这件事。我希望做以下工作:

  • 提交时检查项目是否已在列表中
  • 如果是,则显示警报,而不是添加
  • 如果没有,请将该项目添加到列表中 在网上搜索之后,我找到了以下代码
  • const submitHandler=(e)=>{
    e、 预防默认值();
    const newScorer=e.target.value;
    const existingScorer=players.includes(newScorer);
    if(现有记分员){
    log('已在列表中!');
    }否则{
    constnewplayer={id:nanoid(4),numer:number};
    setPlayers([…players,newPlayer]);
    设置编号(“”);
    }
    };
    
    问题是它不起作用,即使“newScorer”已经在名单上,他补充道

    提前谢谢

    问候
    Peter

    根据评论,您想检查
    number
    是否在
    players
    数组中,以便

    const existingScorer = players.find(player => player.nummer === number);
    

    。。。假设
    nummer
    是正确的属性。

    感谢Janez的编辑:)无关,但是neePlayer对象的键应该是“number”而不是“nummer”吗?我不明白为什么simpe if/else不起作用,在console.log之后添加一个return,它应该起作用,尽管看起来
    players
    是一个对象数组。但是
    includes
    只是检查其中是否有一个值。另外,
    number
    似乎没有定义,所以很难说你在那里想做什么。谢谢Dan!不幸的是,添加退货没有帮助,仍然不起作用…:-(@Bafsky:yes players是一个对象数组。我是否应该使用``filter()```这个数字已经定义,并且正在工作。我附加了一个github链接:.Maybee如果你看到所有的文件会更容易帮助。非常感谢。现在它按照我的想法/想要的方式工作:在重写代码之后,它突然不起作用:
    const addHandler=()=>{const existingScorer=players.find((player)=>player.number==number);if(existingScorer){console.log('existing')}else{setPlayers([…players,{id:players.length,number:+number,}])无效的是,即使player号码已经存在,也会用新的id setNumber('')重新输入
    为什么你有
    数字:+number
    ?这会在将数字添加到列表之前增加数字。只需使用
    数字:number
    。我的错。我想
    ++number
    +number
    实际上没问题。问题是你在转换之前比较数字,所以它永远找不到匹配的数字。试试这个。。。
    const existingScorer=players.find((player)=>player.number===+number);