javascript - 避免插入重复的子数组

标签 javascript arrays

我现在很困惑。本质上,我试图创建一个函数,它将一个数字作为引用和一个数组,并找到一个等于零的组合(引用数字和数组中的两个),在 subArray 中没有任何重复组合。 .

function helper(number, arr){
  console.log(arr, 'this is arr')
  let answer = [];
  let subArray = []
  for(let i = 0; i < arr.length; i++){
    for(let y = i + 1; y < arr.length; y++){
      var newCombo = [arr[i], arr[y]]
      subArray.push(newCombo) <-- avoid duplicates here
    }
  }
  subArray.forEach( combo =>{
    var referenceAndArray = [number].concat(combo)
    //result will check it adds up to zero
    var result = referenceAndArray.reduce( (accum, value) =>{
      return accum += value;
    },0)

    if(result === 0){ 
      answer.push(referenceAndArray)
    }
  })

  return answer
}

helper(-1, [-1,-1,0,1,2] --> [ [-1, 0, 1 ], [-1, -1, 2] ]

我们可以假设数组从头开始排序

我尝试使用 Array.includes 进行测试但它似乎不适用于子数组。

最佳答案

由于数组是按标识而非值进行比较的,因此您可以加入数组内容并进行比较以查看它是否已经存在。

基本替换subArray.push(newCombo) <-- avoid duplicates here

let exists = subArray.some(combo => combo.join() === newCombo.join()); if (!exists) { subArray.push(newCombo); }

例如,如果您有一个包含 [[-1, -1, 2], [-1, 0, 1]] 的数组当你找到另一个组合时 [-1, -1, 2] ;在插入它之前,我们检查它是否已经存在,只有在不存在的情况下才添加它。为此,将遍历数组检查字符串“-1,-1,2”是否已存在,使用 .some() (只要数组中的 1 个元素匹配就为真)。在这种情况下,我们与“-1,-1,2”和“-1,0,1”进行比较,因此 exists是真的,因此我们跳过将它添加到数组中。

关于javascript - 避免插入重复的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433398/

相关文章:

编译器警告将结构数组(结构本身的成员)传递给函数

javascript - targetTouches是否跟踪同时在多个元素上移动的触摸?

javascript - 在没有地址栏的 Android 上打开链接

javascript - 如何将色 block append 到我的 li 列表中?

java - 为什么我的排序算法在 for 循环第三次迭代后失败?

c - 使用指针更改函数中数组值的问题

javascript - jQuery - 当 id 是数组类型表示法时,ID 选择器需要帮助

javascript - 分割文本避免某些情况(Javascript)

javascript - 在同一 Controller 中使用范围变量进行 Angular 循环

javascript - 数组过滤器未返回正确的值