gpt4 book ai didi

javascript - 打印数组中的所有值,但如果有间隔则使用格式

转载 作者:行者123 更新时间:2023-11-30 09:40:43 28 4
gpt4 key购买 nike

我有一组数字。我想打印所有值,但如果可能的话,要有间隔。例如:

[1,2,3,5,7,8,10]

我想你会明白我想通过例子得到什么。对于上面的数组,我想得到以下字符串:

"1-3, 5, 7-8, 10"

所以,数组中有 1,2,3,然后是 5。4 不存在,所以我们关闭第一个区间并添加到字符串 1-3。然后继续,5之后是7。这种情况下我们不能创建区间,所以我们只加5。然后继续,我们有7,7之后是8,8之后是10,所以我们只能创建7-8区间. 10 是最后一个,所以我们只需将它添加到字符串中。结果,我们有:

"1-3, 5, 7-8, 10".

我用以下方法解决了这个任务:

let numbers = [1,2,3,4,7,9,12,13];

numbers.sort((a,b) => {return a - b});
let str='';
let startIndex =0, start, end;
if(numbers.length === 1) {
str = `${numbers[0]}`;
}

for(let i=0; i< numbers.length; i++) {
if(i === 0) {
continue;
}

if(numbers[i-1] +1 !== numbers[i]) {
start = numbers[startIndex];
end = numbers[i -1];
if(start - end === 0) {
str += `${start},`;
}
else {
str += `${start} - ${end},`;
}

startIndex = i;

}

if(i+1 === numbers.length) {
start = numbers[startIndex];
end = numbers[i];
if(start - end === 0) {
str += `${numbers[i]}`;
} else {
str += `${numbers[startIndex]} - ${numbers[i]}`;
}
}

}

console.log(str);

但是,代码看起来非常复杂,难以理解。有更好的方法吗?

DEMO

最佳答案

您可以用它们的前身测试这些项目并将其移至正确的组。

var data = [1, 2, 3, 5, 7, 8, 10],
result = data.reduce(function (r, a, i, aa) {
if (aa[i - 1] === a - 1) {
r[r.length - 1][1] = a;
} else {
r.push([a]);
}
return r;
}, []).map(a => a.join('-')).join(', ');

console.log(result);

关于javascript - 打印数组中的所有值,但如果有间隔则使用格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258755/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com