数组中索引id排序的高效方法

原麻省理工学院的链接找不到了,但是我已经保留了副本,现在我们如果要写代码,先谈几分钟的需求吧,(好吧,话有点多了,如果觉得此篇文章对你的nodeJs有帮助,请果断收藏)
结合麻省理工学院博士的代码,还有链表的特性,研究了一套高效的序列化数组方法。
我们知道链表每个单位之间,首位都是相连的。
而数组,如果我们要遍历的,并且同步里面的id索引,以往的方法往往是(拿js来举例)

var arr=[{"templateName":"?'>''>\"df\"\"h\\\\\\'","age":23,"birthday":"2019-03-12T00:00:00.000Z","pic":"cf94a2889138643f8c67f6b365f60daf3285251d1041331.gif","sex":0,"id":75},{"templateName":"s'd'g","age":4,"birthday":"2019-03-05T00:00:00.000Z","pic":"53835cd4e01b6e1a8f359cfa6ed85bea22bd34da1261175.gif","sex":0,"id":74},{"templateName":"`\\\"g<`>f's>","age":23,"birthday":"2019-03-22T00:00:00.000Z","pic":"134dba032f478172a5d683233a154bcee9f4865c745458.gif","sex":0,"id":73},{"templateName":"\"sdg'sdf\\'>s>>","age":32,"birthday":"2019-02-27T00:00:00.000Z","pic":"7285bd10a4c6ad741143565e2fc88c01197b38f2222139.gif","sex":0,"id":72},{"templateName":">'''>\">'>\"\"\"1","age":14,"birthday":"2019-03-19T00:00:00.000Z","pic":"3ca045315d317100fe599eb1fc9480b195f3506d412540.gif","sex":0,"id":71},{"templateName":"sd'\">``\"'\\\\\\\\g","age":32,"birthday":"2019-04-01T00:00:00.000Z","pic":"523d0686f9221d405753853d2e84d09ba5535f0c948206.gif","sex":0,"id":70},{"templateName":"<script type=\"text/javascript\">alert(\"sdg\")</script>","age":44,"birthday":"2019-03-03T00:00:00.000Z","pic":"e11585ced3dacf1229d09c76d53e4108880281d63329071.gif","sex":0,"id":69}]

function remove(id){
	for(var i=id,l=arr.length-1;i<l;i++){
		arr[i]=arr[i+1];
		arr[i].id=arr[i].id-1;
	}
	arr.length--;
}
console.time('1');remove(1);console.timeEnd('1');

调用的时候remove(i)删除第i-1个元素。
这样就完成了一个删除操作,顺便把id排序。但是实际上这样的方式,是低效的,而且不支持nodeJs,因为node废弃了数组的【】中间带索引的修改操作,如果存在则会在运行时报错。
于是我给Array新增了一个属性方法remove,然后使用数组切片,加上原生的方式遍历id,进行id减一的操作。

Array.prototype.remove =function(f){var r = this.slice(f+1||this.length);r.forEach(function(i){
Object.defineProperty(i,'id',{value:i.id-1})});this.length=f<0?this.length+f:f;return this.push.apply(this, r)}
console.time('2');arr.remove(1);console.timeEnd('2');

调用的时候arr.remove(i)就是删除第i-1个元素.
这样不单单支持nodeJs,而且效率性能超过上面的方法,
56152343750/56884765625=0.98712446351931
所花时间约为98%,提升了大约2%的速度。

数组切片方法支持NodeJs,性能提升10%
然后我们就实现了高效的数组切片删除排序方法,使用场景,高并发,高可用。

猜你喜欢

转载自blog.csdn.net/qq_33359662/article/details/88317040