本文介绍了关于利用JS实现同Excel表现的智能填充算法的相关内容,分享出供大家参考学习、下面话不多说了,来一起看看详细的介绍吧
是不是很神奇?假设我有一组给定的数据<代码> [1,3,‘aaa1’,‘bbb2]> 代码,Excel的智能填充能够给我返回<代码> (5、7、“aaa2”、“bbb3”, 9日11 ' aaa3 ', ' bbb4 '] 代码>这一组数据。
更厉害的是,智能填充不是简单地对数据进行递增,而是会对数据进行分组,每个分组按照自己的规则去进行递增,就比如说我们可以从<代码> [1、2、“x”, 3) 代码>得到<代码> [3、4、“x”, 4] 代码>。
在明白这些结论之后,我们就可以去讨论它到底是怎么实现的。
我们用数组(1、2、糖化血红蛋白,' a2c ']作为例子。当我们拿到这样一个数组的时候,第一步是要对其进行分析,分析数组内每个元素到底是一个数字,一段字符串,还是别的什么东西。分析完了,就要给他们都标注更详细的信息,然后把这些信息都组合起来。
比如数组元素,可以被处理成下面这个样子:
{ realValue: 1、 numericValue: 1、 splitParts:“数量”, 指数:0 }
而数组元素糖化血红蛋白,则可以处理成这样:
{ realValue:糖化血红蛋白, numericValue: 1、 splitParts: (' a ', ' c '), 指数:2 }
代码请戳:separator.js
可以注意到,我会提取每一个元素的纯数字部分出来,然后把其余部分通过一个数组储存起来。这一切就是分离器所做的工作,我们最终会得到一个富含信息的新数组,然后继续我们的工作吧!
智能填充的最小单位是“组”。当我们通过上一步得到一个富含信息的新数组之后,接下来就应该对它们进行合理的分组。分组的动作包含了两个细节:
-
<李>同一组的数据应该拥有一致的“类”型,这里我们使用splitParts属性去实现。李>
<李>同一组的数据应该是连续的,否则的话就要把不连续的数据扔到一个新的组去。李>
假设有一个数组(1、2、糖化血红蛋白,a2c, 6、8],元素1和2就应该被分配到名为数量的组去,糖化血红蛋白和a2c则会被分配到名为ac的组里面,而6和8则会被另外分配到名为Number1的新组里面去,最后结果如下:
{ “数量”:[{ realValue: ' 1 ', … }, { realValue: ' 2 ', … }), “交流”:[{ realValue:糖化血红蛋白, … }, { realValue:“a2c”, … }), “Number1”: [{ realValue:“6”, … }, { realValue:“8”, … }) }
代码请戳:classifier.js
通过上述步骤,我们成功把数据进行分组,组与组之间的元素并不会相互干扰。接下来我们需要实现一个专门做“线性回归”的方法,有了这个方法我们才能对数据进行“预测”。
"线性回归”是一个数学理论,详情请自己谷歌之,这里我直接使用线性回归的二元一次公式去求得回归直线的斜率:
y=ax + b
=?x # 8722; x ') (y # 8722; y ')/?x # 8722; x ') (x) # 8722; x ')
引用>
其中x”是所有点x坐标的平均数,同样的,y '是所有点y坐标的平均数。
利用JS实现一个同Excel表现的智能填充算法