【问题标题】:Group close values分组收盘价
【发布时间】:2018-01-16 17:15:13
【问题描述】:

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

任何想法如何实现这一目标?我被重复删除和整个分组过程所困扰。

【问题讨论】:

  • 似乎是一个简单的循环和比较。你尝试了什么?
  • 尝试了两个相互嵌套的循环 'code'for (var i=0; i
  • 发布代码,我们将能够查看它。

标签: javascript


【解决方案1】:

我认为这是你需要的:

// 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))

【讨论】:

  • 谢谢,它就像魅力一样。我会检查代码并变得更聪明。 =) 拯救了我的一天,再次感谢您!
  • 欢迎您,如果您认为我的回答解决了您的问题,请点击复选标记考虑accepting it
【解决方案2】:

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

迭代组并与minmax 进行比较。如果您要比较的数字不适合任何现有组,请创建一个新组(minmax 将等于当前数字,items 将是一个包含一个元素的数组,即当前数字)并将 push() 发送到组数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多