arr = [1,2,3,10,20,30,4,5,6,7,8,21,38,57,41,21,6,5,4,3]
预期得到的数组为
[[1,2,3],[3,10,20,30,4],[4,5,6],[6,7,8],[8,21,38,57,41,21,6][6,5,4],[4,3]]
规则:
1.连续的三个点差值不大于5,则放入一个数组中(可允许不到3个点,至少两个点);
2.连续的点插值大于5,则放入同一个数组中;
let arr = [1,2,3,10,20,30,4,5,6,7,8,21,38,57,41,21,6,5,4,3]
let newArr = []
newArr[0] = []
let index = 0
newArr[0].push(arr[0])
let number = 1 // 记录数组中有几个点(在插值不大于5的数组中)
let isCurve = false // 记录当前数组是否为插值大于5的数组,是为true
for (let i = 1; i < arr.length; i++) {
// console.log(isCurve, number)
if (Math.abs(arr[i]-arr[i-1]) < 5) { // 取绝对值
if (!isCurve) {
if (number == 1) {
newArr[index].push(arr[i])
number = 2
} else {
newArr[index].push(arr[i])
index = index + 1
newArr[index] = []
newArr[index].push(arr[i])
number = 1
}
} else {
isCurve = false
index = index + 1
newArr[index] = []
newArr[index].push(arr[i - 1])
newArr[index].push(arr[i])
number = 2
}
} else {
if (isCurve) {
newArr[index].push(arr[i])
} else {
if (index == 0) {
if (number == 1) {
newArr[index].push(arr[i])
isCurve = true
} else {
index = index + 1
newArr[index].push(arr[i-1])
newArr[index].push(arr[i])
number = 2
isCurve = true
}
} else {
newArr[index].push(arr[i])
isCurve = true
}
}
}
}