有如下数字字符串:
174,176,177,178,179,180,183,189,190,
期待结果:
174,176~180,183,189~190
想不出怎么处理,有什么思路或者代码示例,谢谢!!
有如下数字字符串:
174,176,177,178,179,180,183,189,190,
期待结果:
174,176~180,183,189~190
想不出怎么处理,有什么思路或者代码示例,谢谢!!
var str="174,176,177,178,179,133,134,125,126,127,128,130,129,180,183,189,190";
var arr=str.split(",").map(val=>Number(val)).sort((val1,val2)=>val1-val2);
var last=arr[0];
var n=1;
var res=arr.reduce((prev,val,index)=>{
var _last=last;
last=val;
if(index===arr.length-1){
if(val==(_last+1))return prev+"~"+val;
return prev+","+val;
}
else if(val==(_last+1)){
n++;
return prev;
}
else if(n===1){
n=1;
return prev+","+val;
}else{
n=1;
return prev+"~"+_last+","+val;
}
});
console.log(res)
var arr = [174, 176, 177, 178, 179, 180, 183, 189, 190];
var r = arr.slice(0);
var nr = [],
wr = [];
for (var i = 1; i < r.length; i++) {
nr.push(r[i] - r[i - 1]);
}
console.log(nr)
var k = 0;
for (var j = 0; j < nr.length; j++) {
if (nr[j] != 1 && nr[j + 1] == 1) {
wr.push(arr[j] + '');
}
if (nr[j] == 1) {
k++;
if (nr[j + 1] != 1) {
wr.push(arr[j-k+1] + '~' + (arr[j+1]));
k = 0;
}
}
}
console.log(wr);
写代码之前先想想这个需求是哪来的,为什么要这么做!数据是谁给你的,给你这样的数据,却要前端来处理成想要的格式?每次的数据都不一样,换一次数据你就得重新写一次字符串拼接。累死人,开玩笑呢。这种应该服务端处理的问题,不要往身上揽。
<script type="text/javascript">
var str = "174,176,177,178,179,180,183,189,190";
var strArray = str.split(",");
var temp = "";
var result = "";
for (var i = 0; i < strArray.length; i++) {
var topTow = strArray[i].substring(0, 2);
if (temp == topTow) {
//result+=topTow+",";
} else if (temp != "") {
result += temp + "~" + topTow + ",";
temp = topTow;
} else {
temp = topTow;
}
}
alert(result);
</script>
目前想到的办法是[174, 176, 177, 178, 179, 180, 183, 189, 190] -> [174, [176, 177, 178, 179, 180], 183, [189, 190]];
,然后[176, 177, 178, 179, 180] -> [176_180]
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答842 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
昨天有童鞋指出输出结果不对,一看逻辑确实是有点问题
原答案已修改,代码更简洁,逻辑更清晰,并已注释: