如何移除JavaScript sum函数返回的数字和数对数组中的重复项?
解决数对去重的几种实用方法
方法一:从根源避免重复(最推荐)
不用等生成重复数对再去重,直接控制循环范围,只生成不重复的数对。
原理很简单:只要让数对里的第一个数不大于第二个数,就不会出现[3,2]这种和[2,3]重复的情况。循环时让i从0开始,到value的一半(向下取整)结束,对应的第二个数就是value - i。
代码示例:
function sum(value) { const pairs = []; // 循环到value的一半,确保i <= value - i for (let i = 0; i <= Math.floor(value / 2); i++) { pairs.push([i, value - i]); } return pairs; } console.log(sum(5)); // 输出 [[0, 5], [1, 4], [2, 3]]
方法二:对已生成的数对去重(转换为字符串用Set判断)
如果已经有了包含重复的数对数组,可以把每个数对转换成唯一的字符串标识,再用Set去重。比如把数对排序后转成字符串,这样[2,3]和[3,2]都会变成"2,3",Set就能识别出重复。
代码示例:
function removeDuplicates(pairs) { const seen = new Set(); return pairs.filter(pair => { // 排序后转字符串,生成唯一key const key = pair.sort((a, b) => a - b).join(','); if (!seen.has(key)) { seen.add(key); return true; } return false; }); } // 测试用的全量数对 const fullPairs = [[0,5],[1,4],[2,3],[3,2],[4,1],[5,0]]; console.log(removeDuplicates(fullPairs)); // 输出 [[0,5],[1,4],[2,3]]
方法三:直接过滤不符合条件的数对
因为重复的数对都是第一个数大于第二个数的,所以直接过滤掉这类数对即可。
代码示例:
function filterDuplicates(pairs) { return pairs.filter(pair => pair[0] <= pair[1]); } console.log(filterDuplicates(fullPairs)); // 输出 [[0,5],[1,4],[2,3]]
内容的提问来源于stack exchange,提问作者SuperIden3
相关产品推荐
相关产品推荐

