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

如何遍历包含对象的数组?需适配现有简单数组功能代码

处理包含对象的数组实现点击判断功能

首先看你原来的代码是用单个数组来判断点击的td是否属于目标ID,现在换成了包含多个locations数组的对象数组,其实只需要稍微调整一下逻辑就能实现同样的功能,甚至可以更灵活。

先给你修改后的完整代码,然后再解释关键点:

// 注意:这里把01改成1,避免JS把前缀0的数字当成八进制解析产生问题
let boxes = [
  { locations: [1, 2, 3]},
  { locations: [23, 24, 25]},
  { locations: [41, 42, 43]}
];

function hitMiss(boxes) {
  // 把所有对象里的locations数组合并成一个大数组,方便后续判断
  const allTargetIds = boxes.flatMap(item => item.locations);
  
  $("td").on("click", function(){
    const clickedId = parseInt($(this).attr("id"), 10);
    if (allTargetIds.includes(clickedId)) {
      $(this).addClass("yes");
      console.log("full");
    } else {
      $(this).addClass("no");
      console.log("empty");
    }
  });
};

// 记得调用函数
hitMiss(boxes);

几个关键调整点:

  • 合并目标ID数组:用flatMap方法遍历boxes里的每个对象,把每个对象的locations数组提取出来并合并成一个大数组,这样就和你原来的box1结构一致了,判断逻辑也能沿用类似的思路。
  • 类型统一:$(this).attr("id")返回的是字符串类型,而你数组里存的是数字,所以用parseInt把它转成十进制数字,再用includes做存在性检查,比原来的find更简洁高效。
  • 避免八进制陷阱:原来的01、02这种写法在JS里会被解析成八进制数,比如010会变成十进制的8,容易出现预期外的错误,所以直接写十进制数字更稳妥。

如果之后你需要针对不同的locations数组做不同的处理(比如不同的样式或日志),也可以在点击事件里遍历boxes对象,判断当前点击的ID属于哪个对象的locations,比如:

$("td").on("click", function(){
  const clickedId = parseInt($(this).attr("id"), 10);
  // 找到包含当前ID的对象
  const matchedBox = boxes.find(item => item.locations.includes(clickedId));
  if (matchedBox) {
    $(this).addClass("yes");
    console.log(`full,属于目标组: ${JSON.stringify(matchedBox.locations)}`);
  } else {
    $(this).addClass("no");
    console.log("empty");
  }
});

这样就能更灵活地处理每个对象的情况啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:18:31