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

数组重复值对象处理:确保各子数组内name1与name2值唯一

处理嵌套数组,确保子数组内name1/name2值唯一

需求说明

需保证每个子数组中的所有对象的name1和name2值唯一:同一子数组内,既不能有重复的name1值,也不能有重复的name2值,同时任意对象的name1不能和其他对象的name2值重复。

示例输入

[
  [
    { id: 1, name1: 'a', name2: 'b' },
    { id: 2, name1: 'c', name2: 'd' },
    { id: 3, name1: 'e', name2: 'a' }
  ],
  [
    { id: 4, name1: 't', name2: 'k' },
    { id: 5, name1: 'j', name2: 'h' },
    { id: 6, name1: 'z', name2: 'x' }
  ]
]

问题分析

示例中第一个子数组里,id=1的对象name1为'a',id=3的对象name2为'a',二者值重复,不符合要求。需要将id=3的对象移至第一个不存在该重复值的子数组中。

处理后结果

[
  [
    { id: 1, name1: 'a', name2: 'b' },
    { id: 2, name1: 'c', name2: 'd' }
  ],
  [
    { id: 4, name1: 't', name2: 'k' },
    { id: 5, name1: 'j', name2: 'h' },
    { id: 6, name1: 'z', name2: 'x' },
    { id: 3, name1: 'e', name2: 'a' }
  ]
]

特殊情况处理

如果遍历所有现有子数组后,发现每个子数组都存在目标对象name1或name2的重复值,则需要新建一个子数组,将该对象存入其中。

实现代码(JavaScript)

function processNestedArrays(arrays) {
  // 遍历每个子数组,逐个检查并调整对象位置
  for (let i = 0; i < arrays.length; i++) {
    const currentSubArray = arrays[i];
    // 用Set记录当前子数组已存在的name1和name2值
    const existingValues = new Set();
    // 倒序遍历,方便移除元素时不打乱索引
    for (let j = currentSubArray.length - 1; j >= 0; j--) {
      const obj = currentSubArray[j];
      const { name1, name2 } = obj;
      // 检查当前对象的name1或name2是否已存在于当前子数组的Set中
      if (existingValues.has(name1) || existingValues.has(name2)) {
        // 移除当前对象
        const removedObj = currentSubArray.splice(j, 1)[0];
        // 寻找可以存放该对象的子数组
        let placed = false;
        // 从当前子数组的下一个开始找
        for (let k = i + 1; k < arrays.length; k++) {
          const targetSubArray = arrays[k];
          const targetValues = new Set();
          // 收集目标子数组的所有name1和name2
          targetSubArray.forEach(item => {
            targetValues.add(item.name1);
            targetValues.add(item.name2);
          });
          // 如果目标子数组没有重复值,就放进去
          if (!targetValues.has(name1) && !targetValues.has(name2)) {
            targetSubArray.push(removedObj);
            placed = true;
            break;
          }
        }
        // 如果所有现有子数组都不行,新建子数组存放
        if (!placed) {
          arrays.push([removedObj]);
        }
      } else {
        // 没有重复,把当前对象的name1和name2加入Set
        existingValues.add(name1);
        existingValues.add(name2);
      }
    }
  }
  return arrays;
}

// 测试示例输入
const input = [
  [
    { id: 1, name1: 'a', name2: 'b' },
    { id: 2, name1: 'c', name2: 'd' },
    { id: 3, name1: 'e', name2: 'a' }
  ],
  [
    { id: 4, name1: 't', name2: 'k' },
    { id: 5, name1: 'j', name2: 'h' },
    { id: 6, name1: 'z', name2: 'x' }
  ]
];

console.log(processNestedArrays(input));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:25:18