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;
}
以上。