Javascript 避免插入重复的子阵列

Javascript 避免插入重复的子阵列,javascript,arrays,Javascript,Arrays,我现在很为难。本质上,我试图创建一个函数,其中它将一个数字作为引用和一个数组,并找到一个等于零的组合(引用数字和数组中的两个),而子数组中没有任何重复的组合 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 &

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

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] ]
函数助手(编号、arr){
console.log(arr,“这是arr”)
让答案=[];
让子数组=[]
for(设i=0;i{
返回accum+=值;
},0)
如果(结果==0){
回答。推送(参考基准)
}
})
回覆
}
助手(-1,[-1,-1,0,1,2]-->[[-1,0,1],-1,-1,2]]
我们可以假设数组从一开始就被排序


我尝试使用
数组进行测试。包括
,但它似乎不适合使用子数组。

因为数组是按标识而不是按值进行比较的,所以您可以加入数组内容并比较它是否已经存在

基本上替换子数组.push(newCombo)combo.join()==newCombo.join()); 如果(!存在){ 子阵推送(newCombo); }


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

您可以使用
,并存储对的字符串版本,这将保证不会存储重复项。这将比在数组中查找元素更快

以下是您的代码,只需进行最小的修改即可使其正常工作:

函数助手(编号、arr){
log(JSON.stringify(arr),“这是arr”);
让答案=[];
设子阵=[];
让uniques=新集合;
for(设i=0;i{
//现在获取存储字符串的数字部分:
var referenceAndArray=[number].concat(s.split(',').map(number));
//结果将检查它的总和是否为零
var结果=参考标准减少((累计,值)=>{
返回accum+=值;
}, 0)
如果(结果==0){
回答。推送(参考基准);
}
})
返回答案;
}
var result=helper(-1,[-1,0,1,2]);//-->[[-1,0,1],-1,-1,2]]

console.log(JSON.stringify(result));
只查找一个组合或所有可能的组合?查找所有可能的组合而不重复数组是按身份而不是按值进行比较的,因此
[]!=[]
工作得很好!我不知道
数组.prototype。一些
.Def很有用!