Javascript 如果我有三个相同的值,但不知道值,请检入数组

Javascript 如果我有三个相同的值,但不知道值,请检入数组,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个随机数的数组,从1到6。 我怎么知道这个数组中是否有两个、三个或四个相同的数字?那个号码是多少?或者如果我有两个数字出现两次 array = [1, 3, 5, 5, 6]; x = array[0]; repetitions = 0; for (let i = 0; i < 5; i++) { const y = array[i]; if (x === y) { repetitions++; } } array=[1,3,5,5,6]; x=数组[0

我有一个随机数的数组,从1到6。 我怎么知道这个数组中是否有两个、三个或四个相同的数字?那个号码是多少?或者如果我有两个数字出现两次

array = [1, 3, 5, 5, 6];    

x = array[0];
repetitions = 0;

for (let i = 0; i < 5; i++) {
const y = array[i];

if (x === y) {
    repetitions++;
  }
} 
array=[1,3,5,5,6];
x=数组[0];
重复次数=0;
for(设i=0;i<5;i++){
常数y=数组[i];
如果(x==y){
重复++;
}
} 
我应该为数组的每个元素执行类似的操作吗


谢谢大家!

这是一个简单的解决方案,可以使用过滤器提供

var数组=[1,2,3,4,4,4,4,4,4,5,5,6,6];
重复变量=[];
var newArray=array.filter((v,i)=>{
if(数组索引of(v)=i){
返回v
}否则{
重复。索引(v)=-1?重复。推送(v):“”;
}
})
log(`newArray${newArray}`);

log(`Duplicate values array${Duplicate}`)这是一个简单的解决方案,可以使用过滤器提供

var数组=[1,2,3,4,4,4,4,4,4,5,5,6,6];
重复变量=[];
var newArray=array.filter((v,i)=>{
if(数组索引of(v)=i){
返回v
}否则{
重复。索引(v)=-1?重复。推送(v):“”;
}
})
log(`newArray${newArray}`);

log(`Duplicate values array${Duplicate}`)
通过比较
indexOf
lastIndexOf
值,检查数组中的值是否存在2次以上

功能重复(arr){
让结果=[]
arr.forEach(项目=>{
如果(arr.indexOf(项目)!==arr.lastIndexOf(项目)){
结果。推送(项目)
}
})
返回[…新集合(结果)];
}

控制台日志(副本([1,2,3,5,5,6,6,6])
通过比较
indexOf
lastIndexOf
值,检查数组中的值是否存在2次以上

功能重复(arr){
让结果=[]
arr.forEach(项目=>{
如果(arr.indexOf(项目)!==arr.lastIndexOf(项目)){
结果。推送(项目)
}
})
返回[…新集合(结果)];
}

控制台日志(副本([1,2,3,5,5,6,6,6])您应该澄清一些限制。例如,此代码将返回数组中重复的第一个数字:

let duplicated = [...array] // makes a copy of the array
                   .sort()  // since `sort` mutate the original
                   .find((item, index, arr) => value === arr[index + 1]);

console.log(duplicated) // 5, in your case
如果没有重复的数字,那么它将返回
未定义的

然而,也许这不是你想要的。考虑到这个数组:
[1,3,6,5,5,6,6,6]
。即使还有重复的
6
,您也将始终返回
5

如果您只想知道是否至少有一个数字重复,上面的代码将起作用。如果您想知道所有重复的数字,以及它们在原始数组中首先出现的顺序,您需要一些不同的东西。例如:

let array = [1, 3, 6, 5, 5, 6, 6, 6];
let occurrences = array
                    .reduce((acc, value) => (acc[value]=-~acc[value], acc),{});

console.log(occurrences); // {"1": 1, "3": 1, "5": 2, "6": 4}
此时,您可以决定如何处理这些数据,例如,您可以过滤掉数组中只出现一次的数字:

console.log(
  Object.fromEntries(
    Object.entries(occurrences).filter(([num, count]) => count > 1)
  )
); // {"5": 2, "6": 4}
等等

更新(见评论):
Object.fromEntries
是最近引入的一种方法,如果目标是拥有一个包含所有引用的筛选对象,那么在这种情况下,可以很容易地用如下函数替换:

const fromEntries = entries => 
  entries.reduce((acc, [key, value]) => (acc[key] = value, acc), {});

您应该澄清一些限制。例如,此代码将返回数组中重复的第一个数字:

let duplicated = [...array] // makes a copy of the array
                   .sort()  // since `sort` mutate the original
                   .find((item, index, arr) => value === arr[index + 1]);

console.log(duplicated) // 5, in your case
如果没有重复的数字,那么它将返回
未定义的

然而,也许这不是你想要的。考虑到这个数组:
[1,3,6,5,5,6,6,6]
。即使还有重复的
6
,您也将始终返回
5

如果您只想知道是否至少有一个数字重复,上面的代码将起作用。如果您想知道所有重复的数字,以及它们在原始数组中首先出现的顺序,您需要一些不同的东西。例如:

let array = [1, 3, 6, 5, 5, 6, 6, 6];
let occurrences = array
                    .reduce((acc, value) => (acc[value]=-~acc[value], acc),{});

console.log(occurrences); // {"1": 1, "3": 1, "5": 2, "6": 4}
此时,您可以决定如何处理这些数据,例如,您可以过滤掉数组中只出现一次的数字:

console.log(
  Object.fromEntries(
    Object.entries(occurrences).filter(([num, count]) => count > 1)
  )
); // {"5": 2, "6": 4}
等等

更新(见评论):
Object.fromEntries
是最近引入的一种方法,如果目标是拥有一个包含所有引用的筛选对象,那么在这种情况下,可以很容易地用如下函数替换:

const fromEntries = entries => 
  entries.reduce((acc, [key, value]) => (acc[key] = value, acc), {});
您可以采取一种方法来计算所有出现的值

结果是一个数组,其中第一个元素是值,第二个元素是值的计数

var数组=[1,3,5,5,6],
计数=数组.from(数组.reduce((m,v)=>m.set(v,(m.get(v)| | 0)+1),新映射);
控制台日志(计数)
.as console wrapper{max height:100%!important;top:0;}
您可以计算所有出现的值

结果是一个数组,其中第一个元素是值,第二个元素是值的计数

var数组=[1,3,5,5,6],
计数=数组.from(数组.reduce((m,v)=>m.set(v,(m.get(v)| | 0)+1),新映射);
控制台日志(计数)

.as控制台包装{max height:100%!important;top:0;}
您是否只有一个或多个倍数?您是否只有一个或多个倍数?如果有两个以上的重复项,则此功能不起作用values@MaheerAli现在修好了+1@MaheerAli感谢您提供的提示
newset()
,:)如果有两个以上的重复项,则该提示无效values@MaheerAli现在修好了+1@MaheerAli谢谢你的提示
newset()
,:)是的,我认为这是最好的解决方案!好极了!但是为什么我会收到“类型“ObjectConstructor”上不存在属性“fromEntries”?很可能您正在使用的引擎不支持
对象。fromEntries
但是,它是最近才出现的:您可以使用第三方polyfill,例如Babel,或者用与第一个
reduce
类似的方法自己重新创建对象。是的,我认为这是最好的解决方案!好极了!但是为什么我收到“ObjectConstructor”类型上不存在“Property‘fromEntries’”