如果求得一个数组中连续相同的三个以上的元素。
例如[1,2,3,3,3,3,4,5,6,7],结果为2-5;(只有一组结果)
再例如[1,2,3,3,3,4,5,6,6,6,6,7,8,9]结果为[2-4,7-10];(可能有多组结果,若有难度,可先考虑一组结果的情况。)
例如[1,2,3,3,3,3,4,5,6,7],结果为2-5;(只有一组结果)
再例如[1,2,3,3,3,4,5,6,6,6,6,7,8,9]结果为[2-4,7-10];(可能有多组结果,若有难度,可先考虑一组结果的情况。)
解决方案 »
- jQuery ajax动态添加select下拉框的显示问题
- 求教uploadify3.1的formdata问题
- 程序控制光标在文本区域移动
- 使用window.setTimeout()+ajax 定时无刷新 实现Web在线客服中的消息查询,不知是否可行??请教大家
- 请大家推荐本学习Javascript的经典好书,谢谢。
- 怎么修改模态框的标题呀?
- 郁闷得很!!!不知道为什么我的网页载入不了声音????
- 探讨Javascript下的系统核心编程(高手请进)!!!
- 怎样赋值给动态的input对象?我找遍了函数也不成!
- 我用层做浮动菜单,但是导航文件放在frame中,页面太窄,层不能显示?
- JS难题,frame页中函数无法执行
- 怎么解决多重引号的问题
var arr=[1,2,3,3,3,4,4,5,6,7];
var res=[];
var last="";
var o=false;
for(var i=0;i<arr.length;i++) {
if(last===arr[i] && !o) {
res.push(arr[i-1]);
} else {
if(res.length<2)
res=[];
else {
if(!o)
res.push(arr[i-1]);
o=true;
}
}
last=arr[i];
}
alert(res);
</script>
var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];function stripDouble(arr){
var a = [];
for(var i = 0; i < arr.length; i++){
if(a[a.length - 1] != arr[i]){
a.push(arr[i]);
}
}
return a;
}function check(arr){
var ret = [];
var a = stripDouble(arr);
var i = 0;
while(i < a.length - 3){
var x = a[i];
var y = a[i + 1];
var z = a[i + 2];
if(z - x == 2){
ret.push({
x: x,
y: y,
z: z
});
}
i++;
}
return ret;
}var ret = check(arr);
for(var i = 0; i < ret.length; i++){
alert(ret[i].x + ', ' + ret[i].y + ', '+ ret[i].z);
}
</script>
var b=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
function re(obj,n){
if(obj[n]==obj[n+1])
return true;
return false;
}
function re2(obj,n){
var ret=n;
if(re(obj,n)&&re(obj,n+1)){
while(re(obj,n)){n++;}
ret=n;
}
return n;
}
function re3(obj){
var list=new Array();
for(var i=0; i<obj.length; i++){
var j=re2(obj,i);
if(i!=j){
list.push(i+"-"+j);
i=j;
}
}
return list;
}
alert(re3(a));
alert(re3(b));
var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];function stripDouble(arr){
var a = [];
for(var i = 0; i < arr.length; i++){
if(a[a.length - 1] != arr[i]){
a.push(arr[i]);
}
}
return a;
}function check(arr){
var ret = [];
var a = stripDouble(arr);
var i = 0;
while(i < a.length - 2){
var x = a[i];
var y = a[i + 1];
var z = a[i + 2];
if(z - x == 2){
ret.push(x + '-' + z);
}
i++;
}
return ret;
}var ret = check(arr);
for(var i = 0; i < ret.length; i++){
alert(ret[i]);
}
</script>
var a=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
function diff(begin){
if(!a[begin])
return;
var i=0;
var n=begin;
while(a[n+1]&&a[n]==a[n+1]){
i++;
n++;
}
if(i>1){
rs.push(begin+'-'+(begin+i));
}
n++
diff(n);}
diff(0);
alert(rs.join(','));
function getSameRange(array){
var obj=new Object();
for(var i=0;i<array.length;i++){
obj[array[i]]=(i+1);
}
var ret=[]
for(var k in obj){
if((obj[++k]-obj[--k])&&(obj[++k]-obj[--k])!=1){
ret[ret.length]=(obj[k])+"-"+(obj[++k]-1)
}
}
return ret
}
var v1=[1,2,3,3,3,3,4,5,6,6,7,7,10,11];
var ret=getSameRange(v1);
alert("结果范围是"+ret)
</script>