数字数组将相邻的数字排在一起

1.数字相邻,重新生成一个新的数组,相邻的数字差值大于2的情况下取最小和最大的数字
注意:请先将数组按升序排序

var array = [1,2,5,8,9,10,14,15,17,19,20,21,22,23,25];

function sort(arr){
	return repeat(function(num,newArr){
				if(newArr[0].length == 1 && newArr[0][0]-num == 1){
					return [
							[num,newArr[0][0]]
						].concat(newArr.slice(1))
				}else if(newArr[0].length == 2 && newArr[0][0]-num == 1){
					return [
						[num,newArr[0][1]]
					].concat(newArr.slice(1))
				}else{
					return [
							[num]
						].concat(newArr)
				}
			},arr,[])
}

function repeat(func,arr,final){
 	if (arr.length == 0){
 		return final
 	}else{
 		return func(aar[0],repeat(func,arr.slice(1),final))
 	}
}	
sort(array)   // [[1,2],[5],[8,10],[14,15],[17],[19,23],[25]]

本人也是一个新手,看一眼的时候也是一脸懵逼,这什么意思?逻辑都把自己给绕晕了,所以只能自己一点一点的往里面套数据,这才弄懂逻辑,
concat是数组合并,
slice是数组截取,一个参数返回的是从参数下标开始后面元素
通过函数repeat循环数据,
如:[1,2,4,5,7]
repeat中的函数func的两个参数num和newArr

numnewArr
1[[2],[4,5],[7]]
2[[4,5],[7]]
4[[5],[7]]
5[[7]]
7[]

最终得到的是[[1,2],[4,5],[7]]

如有更好的方法请多多评论交流

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值