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
  • 在连续迭代中,如果值等于最后一个值+1,则我们处于相同的范围内,因此我们通过更改
    范围
    数组中的最后一个值来更新它。否则,我们将
    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-剩下的你应该能弄清楚