Javascript 查找数组中连续数字的所有范围
给定一个排序的数字数组,如何获得连续数字的范围?函数应以字符串形式返回范围和单个数字。例如:Javascript 查找数组中连续数字的所有范围,javascript,arrays,algorithm,ecmascript-6,Javascript,Arrays,Algorithm,Ecmascript 6,给定一个排序的数字数组,如何获得连续数字的范围?函数应以字符串形式返回范围和单个数字。例如: function findRanges(arrayOfSortedNumbers) { // logic here } findRanges([1, 3, 4, 5, 7]) => (expected output: "1, 3-5, 7") findRanges([1, 2, 3, 5]) => (expected output: "1-3, 5") findRanges([2,
function findRanges(arrayOfSortedNumbers) {
// logic here
}
findRanges([1, 3, 4, 5, 7]) => (expected output: "1, 3-5, 7")
findRanges([1, 2, 3, 5]) => (expected output: "1-3, 5")
findRanges([2, 3, 4, 5, 6]) => (expected output: "2-6")
很抱歉,无法更好地解释此问题。您可以使用:
reduce
在数组上迭代,创建一个包含范围
和活动范围起点(rangeStart
)的对象rangeStart
范围
数组中的最后一个值来更新它。否则,我们将ranges
数组中的元素推入,并将rangeStart
更新为该元素reduce
返回对象输出的ranges
属性,并使用逗号将其连接起来函数findRanges(数字){
返回[…数字]。排序((a,b)=>a-b)。减少((acc,x,i)=>{
如果(i==0){
附件范围推送(x);
acc.rangeStart=x;
}否则{
如果(x==acc.last+1){
附件范围[附件范围长度-1]=附件范围开始+'-'+x;
}否则{
附件范围推送(x);
acc.rangeStart=x;
}
}
acc.last=x;
返回acc;
},{ranges:[]}).ranges.join(',');
}
log(findRanges([1,3,4,5,7]);
log(findRanges([1,2,3,5]);
log(findRanges([2,3,4,5,6])代码>(预期输出:
REAL code)
请编辑您的问题,并提供您迄今为止尝试过的内容?不如给出提示。1-对数组进行排序2-从数组中的第一个元素开始向前走3-如果下一个项目是上一个项目+1,则继续走4-否则,将刚发现的范围添加到结果数组5-继续将当前项目作为新的第一个项目。6-剩下的你应该能弄清楚