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

JavaScript新手求助:两数组匹配后生成带禁用属性的HTML选项

你的方法不可行,我来帮你修正并解释

首先得指出你当前代码里的核心问题:el.includes(array2)这个判断逻辑完全不对哦!

  • el是array1里的字符串(比如"8:00AM"),而includes()方法在字符串上调用时,是用来判断当前字符串是否包含传入的子串。你把数组array2传进去,JS会自动把数组转成字符串(也就是"11:00AM,11:00AM,3:00PM"),然后判断el是不是这个长字符串的子串——这显然不是你想要的「判断当前时间是否在禁用列表里」的逻辑。

正确的写法

你需要反过来,用数组的includes()方法来检查array2里是否包含当前的el:

var array1 = ["8:00AM", "9:00AM", "10:00AM","11:00AM"];
var array2 = ["11:00AM", "11:00AM", "3:00PM"];

array1.map((el, i) => 
  <option key={i} disabled={array2.includes(el)}>{el}</option>
)

这样就能实现:只要el存在于array2中,对应的<option>就会加上disabled属性,完全符合你的需求。

小优化:提升性能(可选)

因为你的array2里有重复元素(比如两个"11:00AM"),如果数组很大的话,每次调用array2.includes(el)都会遍历整个数组,效率不高。可以先把array2转成Set,利用Set的O(1)查找性能:

var array1 = ["8:00AM", "9:00AM", "10:00AM","11:00AM"];
var array2 = ["11:00AM", "11:00AM", "3:00PM"];

const disabledTimeSet = new Set(array2);
array1.map((el, i) => 
  <option key={i} disabled={disabledTimeSet.has(el)}>{el}</option>
)

这样修改后,你的代码就能完美实现「匹配值对应的下拉选项禁用」的功能啦~

内容的提问来源于stack exchange,提问作者Heisenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:55:58