前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript array merge 数组合并

JavaScript array merge 数组合并

原创
作者头像
vanguard
修改2020-04-07 11:24:15
1.3K0
修改2020-04-07 11:24:15
举报
文章被收录于专栏:vanguard

Dilemma of speed/time and space/memory. a javascript speed & space case.

代码语言:javascript
复制
a = [0,1,2,3,4,5,6,7,8,9];
b = a.slice().reverse();

The concat() method is used to join two or more arrays.

This method does not change the existing arrays, but returns a new array, containing the values of the joined arrays.

代码语言:javascript
复制
console.log(a.concat(b));

当字符串处理

代码语言:javascript
复制
console.log((a.toString()+','+b.toString()).split(',').map(function(data){return +data;}));

500个字符和1000个字符长度concat和字符串转换+拼接+转换耗时差异不大,手动谷歌浏览器30-40ms的脚本时间,

超过这个问题直接看字符串数组拼接,人家说当字符串个数较少(少于1000个),或者从固定字符串数组中取字符串拼接时,string.join的效率最高, 当分割符是string.empty时,string.join等同于string.Concat,同时,string.Concat等同于使用+,c#编译器会将+编译成和Concat一样的代码;当字符串小于等于四个时,用一个语句拼接效率最高, 当拼接的字符串多于5个时,string.Concat会接收一个数组作为参数,这反而会降低字符串拼接效率, 所以当字符串超过五个时,每四个拼接一次效率最高...

其它的办法

代码语言:javascript
复制
for(var i in b){ a.push(b[i]);}
a.push.apply(a,b);

泛化到更多的内存问题,记录两个算法:

引用计数垃圾收集

这是最初级的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。该算法有个限制:无法处理循环引用的事例。在下面的例子中,两个对象被创建,并互相引用,形成了一个循环。它们被调用之后会离开函数作用域,所以它们已经没有用了,可以被回收了。然而,引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收。

代码语言:javascript
复制
function f() {
  var o1 = {};
  var o2 = {};
  o1.p = o2; // o1 引用 o2
  o2.p = o1; // o2 引用 o1. 这里会形成一个循环引用
}
f();

标记-清除算法

这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”。

这个算法假定设置一个叫做根(root)的对象(在Javascript里,根是全局对象)。垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。

这个算法比前一个要好,因为“有零引用的对象”总是不可获得的,但是相反却不一定,参考“循环引用”。循环引用不再是问题了

在上面的示例中,函数调用返回之后,两个对象从全局对象出发无法获取。因此,他们将会被垃圾回收器回收。第二个示例同样,一旦 div 和其事件处理无法从根获取到,他们将会被垃圾回收器回收。限制: 那些无法从根对象查询到的对象都将被清除,尽管这是一个限制,但实践中我们很少会碰到类似的情况,所以开发者不太会去关心垃圾回收机制。这个算法把"对象是否不再需要"简化定义为"对象是否可以获得".

从2012年起, 所有现代浏览器都使用了标记-清除内存回收算法. 所有对JavaScript垃圾回收算法的改进都是基于标记-清除算法的改进.

编译过程和这颗树好像不占内存不占时间似的,而且运行期的多态是不是被限制了,你说对就对吧。

https://blog.csdn.net/renfufei/article/details/39376311

https://blog.csdn.net/u010178308/article/details/85917828

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management

https://zhuanlan.zhihu.com/p/30552148

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档