组合值

时间:2018-01-16 17:15:14

标签: javascript

我想按照以下方式对数组中的值进行分组或对索引进行分组: 如果两个值之间的差小于阈值,则两个值将组合在一起,但如果第三个值也在第二个值的阈值内,则必须将树编号组合在一起。 例如,我有数组[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]

任何想法如何实现?我坚持复制删除和整个分组过程。

2 个答案:

答案 0 :(得分:0)

这个想法是:创建一个组数组。每个组都是一个包含三个元素的对象:minmaxitems

迭代这些群组并与minmax进行比较。如果您要比较的数字不适合任何现有组,请创建一个新组(minmax将等于当前数字,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))