我如何找到数字数组中的重复项+计数器每个数字如何在内部重复



我需要找到在数组内多于或等于两次的重复项。例如,如果我有一个字符串数组,这将工作

var arrStr = 'i do   as as     becasue               i do as';

function CheckDuplicates(sentence)
{
let arr = sentence.split(" ");
let counter = {};
let duplicates = [];
for(let i = 0;i < arr.length;i++)
{
let item = arr[i];
counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
if(item != "")
{
if(counter[item] == 2)
{
duplicates.push(item);
}
}
}
Object.keys(counter)
.filter(key => !duplicates.includes(key))
.forEach(k => delete counter[k]);
return {
duplicates: duplicates,
counter: counter
};
}

let r = CheckDuplicates(arrStr);
c.log(r.duplicates);
c.log(r.counter);

结果我进入控制台

["as", "i", "do"]
{i: 2, do: 2, as: 3}

但是用同样的代码,如果我尝试用数字数组做这个,我在c.log(r.counter);

中得到{}我不知道为什么include在这种情况下不能处理数字


var arr = [9, 9,  9 ,111, 2, 3, 4, 4, 5, 7 , 7];
function CheckDuplicates(sentence)
{
let counter = {};
let duplicates = [];
for(let i = 0;i < arr.length;i++)
{
let item = arr[i];
counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
if(item != "")
{
if(counter[item] == 2)
{
duplicates.push(item);
}
}
}
Object.keys(counter)
.filter(key => !duplicates.includes(key))
.forEach(k => delete counter[k]);
return {
duplicates: duplicates,
counter: counter
};
}

let r = CheckDuplicates(arr);
c.log(r.duplicates);
c.log(r.counter);

所以在控制台上我得到

[9, 4, 7]
{}

Object.keys以字符串形式返回键,includes也检查类型是否相等。

注释行是我唯一改变的东西,你的代码工作正常(我在推入duplicates时转换为字符串,但你也可以在使用includes时修复它)

var arr = [9, 9,  9 ,111, 2, 3, 4, 4, 5, 7 , 7];
function CheckDuplicates(sentence)
{
let counter = {};
let duplicates = [];
for(let i = 0;i < arr.length;i++)
{
let item = arr[i];
counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
if(item != "")
{
if(counter[item] == 2)
{
duplicates.push(`${item}`); // casting to string
}
}
}
Object.keys(counter)
.filter(key => !duplicates.includes(key))
.forEach(k => delete counter[k]);
return {
duplicates: duplicates,
counter: counter
};
}

let r = CheckDuplicates(arr);
console.log(r.duplicates);
console.log(r.counter);

最新更新