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

TypeScript如何向多维数组中插入不存在的元素?

解决方案

首先,你原来的代码存在两个关键问题:

  • 末尾多余的this.allobj.push(temp)会强制插入对象,直接覆盖前面的条件判断逻辑
  • 如果box的selected属性值动态变化,直接序列化整个对象会导致相同value结构的obj被误判为不同

根据你的需求,以下提供两种针对性方案:

方案一:仅当整个obj的value结构未重复时插入(忽略selected)

如果需求是只有当当前obj的所有value组成的二维结构从未在allobj中出现过,才插入,可使用以下代码:

// 深拷贝当前obj,避免引用共享导致后续修改影响已存入的对象
const temp = JSON.parse(JSON.stringify(this.obj));

// 提取当前obj的value二维数组作为唯一标识
const currentValueMatrix = temp.map(row => row.map(box => box.value));

// 检查allobj中是否存在完全相同的value结构
const isDuplicate = this.allobj.some(existingObj => {
  const existingValueMatrix = existingObj.map(row => row.map(box => box.value));
  return JSON.stringify(existingValueMatrix) === JSON.stringify(currentValueMatrix);
});

// 非重复则插入
if (!isDuplicate) {
  this.allobj.push(temp);
}

方案二:仅当obj中存在新value时插入

如果需求是只要当前obj里有任何一个value从未在allobj的任何元素中出现过,就插入,可使用以下更高效的方案:

// 深拷贝当前obj
const temp = JSON.parse(JSON.stringify(this.obj));

// 收集allobj中所有已出现的value,用Set优化查询效率
const existingValues = new Set<string>();
this.allobj.forEach(obj => {
  obj.forEach(row => row.forEach(box => existingValues.add(box.value)));
});

// 检查当前obj是否包含新value
const hasNewValue = temp.some(row => row.some(box => !existingValues.has(box.value)));

// 存在新value则插入
if (hasNewValue) {
  this.allobj.push(temp);
}

额外优化建议

将allobj的类型从any改为box[][],符合TypeScript类型规范:

allobj: box[][] = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:57:26