我想按照以下方式对数组中的值进行分组或对索引进行分组: 如果两个值之间的差小于阈值,则两个值将组合在一起,但如果第三个值也在第二个值的阈值内,则必须将树编号组合在一起。 例如,我有数组[1,2,3,50,51,52,53,98,99]和treshold = 1然后我的输出应该是这样的:group1 = [1,2,3] group2 = [ 50,51,52,53] group3 = [98,99],或者与指数:group1 = [0,1,2] group2 = [3,4,5,6] group3 = [7,8]
任何想法如何实现?我坚持复制删除和整个分组过程。
答案 0 :(得分:0)
这个想法是:创建一个组数组。每个组都是一个包含三个元素的对象:min
,max
和items
。
迭代这些群组并与min
和max
进行比较。如果您要比较的数字不适合任何现有组,请创建一个新组(min
,max
将等于当前数字,items
将是一个包含一个数组的数组元素,当前数字)和push()
它到组数组。
答案 1 :(得分:0)
我认为这就是你所需要的:
// ES6 version:
function group(arr, treshold) {
arr.sort((a,b)=> a - b) // sort numbers
arr = Array.from(new Set(arr)) // remove duplicates
let out = [[]] // create output array
let c = 0 // counter for groups
arr.forEach((v,i) => {
out[c].push(v) //add value to the current group
if (arr[i + 1]-v > treshold) {
c++ // if next value is out of treshold incrase the counter
out[c] = []
}
})
return out
}
console.log(group([1,2,3,50,51,52,80,34,2,0], 1))