我现在很困惑。本质上,我试图创建一个函数,它将一个数字作为引用和一个数组,并找到一个等于零的组合(引用数字和数组中的两个),在 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/