js 两个数组比较两组或两组以上的重复数据

发布网友 发布时间:2022-04-22 09:03

我来回答

1个回答

热心网友 时间:2022-04-24 12:14

你这个代码不是 JS 啊,看起来倒有些像 Golang。。。


你没有说明你这个比较的目的,因此如果没有别的要求,那么下面是 JS 的代码:

/**
 * 比较两个数组的重复部分
 * @param {Array.<number>} arr1 数组1
 * @param {Array.<number>} arr2 数组2
 * @return {Array.<number>} 返回一个数组,元素 2*n 是匹配开始的位置,元素 2*n+2是匹配终止的地方
 */
function hutiaCompare(arr1, arr2){
    /** @type {number} */
    var len = Math.min(arr1.length, arr2.length);
    /** @type {Array.<number>} */
    var re = [];
    
    for (var i=0; i<len; i++){
        // 为了便于你理解,我把下面两个条件分开写了
        // 按我习惯一般会写在一起
        // 条件1:如果匹配,且没有记录过匹配起始位置
        if (arr1[i] == arr2[i] && re.length%2===0) {
            re.push(i);
        // 条件2:如果不匹配,且已经记录过匹配起始位置了
        } else if (arr1[i] != arr2[i] && re.length%2===1){
            re.push(i);
        }
    }
    if (re.length %2 === 1) re.push(i);
    
    return re;
}


以上,请采纳,请给分。

追问var arr1 = [7,8,7,1,2];
var arr2 = [1,3,1,4,1];
要满足两组或两组以上的才返回true,

var arr3 = [7,8,7,1,2];
var arr4 = [1,3,4,6,1];
这种只满足一组,返回false;

追答

好吧。。。我觉得我终于猜出来你问的是什么意思了。。。寒死。。。


如果我这次没理解错,你想要的是,测试某一个数组中,有没有重复超过两次的元素存在,如果有,返回true,如果没有,返回false。

那么代码是这样:

function test(arr){
    // 使用 哈希 来散列
    var hash = {};
    for (var i=0; i<arr.length; i++) {
        // 如果未初始化,则初始化对应 hash 对象
        if (!hash[arr[i]]) hash[arr[i]] = 0;
        // 计数
        hash[arr[i]]++;
        // 出现超过 1 次即返回 true
        if (hash[arr[i]] > 1) return true;
    }
    return false;
}



以上。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com