JavaScript数组排序到范围

时间:2017-10-31 18:10:51

标签: javascript

我有数据阵列Ex。 var arr = [1,2,3,4,5,7,8,10,11,12,15]。 如果数据序列的数组与超过两位数的范围匹配。我想在上面显示上面的数据数组。 result = [1-5,7,8,10-12,15]

任何人都可以帮助我如何在JavaScript中实现上述结果。

2 个答案:

答案 0 :(得分:1)

您可以检查数字是否在范围内,更改最后一个字符串或将值推送到结果集。

1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 15
^                                    no predecessor, push value
+  ^  +                              predecessor and successor, change last value
      +  +  ^                        predecessor and previous predecessor, change last

var array = [1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 15],
    result = [];

array.forEach(function (a, i, aa) {
    result.push(aa[i - 1] + 1 === a && (aa[i - 2] + 1 === aa[i - 1] || a + 1 === aa[i + 1])
        ? [result.pop().split('-')[0], a].join('-')
        : a.toString());
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

一种方法

function getRanges(array) {
  let ranges = [], rstart, rend;
  for (let i = 0; i < array.length; i++) {
    rstart = array[i];
    rend = rstart;
    while (array[i + 1] - array[i] == 1) {
      rend = array[i + 1];
      i++;
    }
    ranges.push(rstart == rend ? rstart+'' : rstart + '-' + rend);
  }
  return ranges;
}

const range1 = getRanges([1,2,3,4,5,7,8,10,11,12,15]);
console.log(range1);
const range2 = getRanges([1,2,3,5,7,9,10,11,12,14 ]);
console.log(range2);
const range3 = getRanges([1,2,3,4,5,6,7,8,9,10])
console.log(range3);