如何使用javascript查找和记录数组中最长的重复序列号
我的问题是我无法console.log在数组中重复相同的数字。我可以找到此代码出现的次数:如何使用javascript查找和记录数组中最长的重复序列号,javascript,arrays,Javascript,Arrays,我的问题是我无法console.log在数组中重复相同的数字。我可以找到此代码出现的次数: var array = [2, 1, 1, 2, 3, 3, 2, 2, 2, 1], currentNum = 1, counter = 0, item; for (var i = 0; i < array.length; i++) { for (var j = i; j < array.length; j++) { if (array[i]
var array = [2, 1, 1, 2, 3, 3, 2, 2, 2, 1],
currentNum = 1,
counter = 0,
item;
for (var i = 0; i < array.length; i++) {
for (var j = i; j < array.length; j++) {
if (array[i] == array[j])
counter++;
if (currentNum < counter) {
currentNum = counter;
item = array[i];
}
}
counter = 0;
}
console.log(item + " ( " + currentNum + " times ) ");
var数组=[2,1,1,2,3,3,2,2,2,1],
currentNum=1,
计数器=0,
项目;
对于(var i=0;i
但我真正的问题是我想记录2,2,2部分,但我不知道如何记录。
提前非常感谢你们 下面将找到第一个最长的实例(假设有多个相同长度的序列) 第一个
reduce()
为每个序列创建子数组,第二个reduce()检查返回第一个最长序列实例的子数组的长度
var数组=[2,1,1,2,3,3,2,2,2,1];
var res=array.reduce(函数(a,c,i){
if(a.length&&a[a.length-1][0]==c){
a[a.length-1]。推送(c)
}否则{
a、 推送([c]);
}
归还
},[])。减少(函数(a,c){
返回c.length>a.length?c:a;
});
log('Sequence length=',res.length);
log('Value=',res[0])代码>Array.prototype.forEach或reduce更适合通过数组进行迭代。
下面是一个解决方案,其中包含一个遍历数组(只有3个附加变量:))
可以与包含临时结果和项目实际计数的对象一起使用
如果项目等于最后一个项目,则增加最后一个计数,并检查该计数是否大于临时计数。然后将临时计数替换为实际计数
var数组=[2,1,1,2,3,3,2,2,2,1],
count=array.reduce(函数(r,a,i,aa){
如果(a==aa[i-1]){
r、 最后,count++;
如果(!(r.last.count如果两个数字重复计数相同,会发生什么情况?非常感谢:))
var array = [2, 1, 1, 2, 3, 3, 2, 2, 2, 1]
var item = array[0], maxTimes = 1, currentTimes = 1
array.reduce(function(prev, current) {
if (prev === current) {
currentTimes = currentTimes + 1
if (currentTimes > maxTimes) {
maxTimes = currentTimes
item = current
}
} else {
currentTimes = 1
}
return current
})
console.log(item, maxTimes)