欢迎来到知了堂!
联系电话:知了堂-电话号码 028-62016472

知了堂分享数组中索引id排序的高效方法-知了堂

知了堂分享数组中索引id排序的高效方法

  我们知道链表每个单位之间,首位都是相连的。

  而数组,如果我们要遍历的,并且同步里面的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%的速度。

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

  然后我们就实现了高效的数组切片删除排序方法,使用场景,高并发,高可用。
 

  版权声明:本文来源于网络,由知了堂搜集整理,仅供大家学习前端开发时参考