我有以下排序数组的数字(他们可以重复,如21)
let a = [1,2,3,4,7,8,12,15,21,21,22,23]
并希望获得以下(排序)字符串数组
let r =["1-4","7-8","12","15","21-23"]
对于连续数a、a +1、a +2、...、a + n = b,w必须创建串"a-b",例如对于6、7、8,我们想要得到"6 - 8",对于"单独"数,我们想要只得到该数,例如对于12,在上面的例子中,我们得到"12"。
这是我的尝试,但我坚持下去(并得到头痛)
let a = [1,2,3,6,7,8,12,15,21,21,22,23];
let right=a[0];
let left=a[0];
let result=[];
for(let i=1; i<a.length; i++) {
for(let j=1; j<a.length; j++) {
if(a[i]<a[j])result.push(`${a[i]}-${a[j]}`);
}
}
console.log(JSON.stringify(result));
更新:
以下是此question的"反转
5条答案
按热度按时间3pvhb19x1#
您可以将下一个期望值存储在闭包中,并减少数组。
ffdz8vbo2#
这个应该够你用了。
mec1mxoz3#
另一种可能是
cedebl8k4#
您不需要两个循环,只需记录您是从何处开始组的:
gfttwv5a5#
这也是我的答案(受他人答案启发)
说明:g =[]包含结果,第一个范围元素是
f=a[0]
,在开始时,我们检查下一个元素b=a[i+1]
是否等于或小于当前元素x加上一个b<=x+1
。如果否(这意味着range结束或i
是最后一个索引-b =未定义),然后将range推到结果g.push( f-x ? f+'-'+x : f+'' )
(我们在这里检查x是否不等于f乘以f-x -> f-x!=0 -> f!=x
),在按下之后,将第一范围元素f
设置为下一范围(元素b
)。