Javascript 有没有一种简单的方法可以按范围对js数组值进行分组?

Javascript 有没有一种简单的方法可以按范围对js数组值进行分组?,javascript,arrays,Javascript,Arrays,如果我有一个像下面这样的js数组,有没有一个简单的方法来按范围重新分组数组值,逻辑是基于范围步长,范围步长是1,所以如果数组值连续增加1,那么它应该像“1-3”一样写入,否则它应该被分成另一个组,非常感谢 var list = ["1", "2", "3", "5", "6", "9", "12", "13", "14", "15", "16"] function(list) { // * some function here // return ["1-3", "5-6"

如果我有一个像下面这样的js数组,有没有一个简单的方法来按范围重新分组数组值,逻辑是基于范围步长,范围步长是1,所以如果数组值连续增加1,那么它应该像“1-3”一样写入,否则它应该被分成另一个组,非常感谢

var list = ["1", "2", "3", "5", "6", "9", "12", "13", "14", "15", "16"]

function(list) {

    // * some function here //

    return ["1-3", "5-6", "9", "12-16"]
}
你可以用它

var数组=[“1”、“2”、“3”、“5”、“6”、“9”、“12”、“13”、“14”、“15”、“16”],
结果=数组.reduce(函数(r,a,i,aa){
r、 push(!i | | aa[i-1]-a+1?a:r.pop().split('-')[0]+'-'+a);
返回r;
}, []);
控制台日志(结果)

作为控制台包装{max height:100%!important;top:0;}
这些范围的逻辑是什么?它看起来像是三的模或者其他什么,但是“12-16”怎么会变成最后一个呢?嗨,adeneo,很抱歉我忘了指出这一点,逻辑是基于范围步长,范围步长是1,所以如果数组值连续增加1,那么它应该写成“1-3”。非常感谢@博布考虑用逻辑描述来更新问题。