在 JavaScript 中从数组中形成序列
假设我们有一个类似于此的已排序数字数组,其中可以有连续数字。
const arr = [1, 2, 3, 5, 7, 8, 9, 11];
我们需要编写一个 JavaScript 函数,该函数接受这样一个数组。
我们的函数应该为这个数组形成一个序列。该序列应使得对于数组的所有连续元素,只需要编写起始数字和结束数字即可,用破折号 (-) 代替其间的数字,同时保持所有其他数字不变。
因此,对于上述数组,输出应该如下所示:
const output = '1-3,5,7-9,11';
示例
相应的代码如下所示:
const arr = [1, 2, 3, 5, 7, 8, 9, 11]; const buildSequence = (arr = []) => { let pointer; return arr.reduce((acc, val, ind) => { if (val + 1 === arr[++ind]) { if (pointer == null ) { pointer = val; }; return acc; }; if (pointer) { acc.push(`${pointer}-${val}`); pointer = null; return acc; } acc.push(val); return acc; }, []).join(','); } console.log(buildSequence(arr));
输出
控制台中将输出以下内容:
1-3,5,7-9,11
广告