从数组中提取子数组的内存最安全的方法
Memory safest way to pull sub-arrays from an array
我在一个数组中迭代,取出我需要的子数组,然后丢弃其余的。
var newArray = [];
for (var i = 0; i < oldArray.length; i++) {
if (oldArray[i][property] == value) {
newArray.push(oldArray[i]);
}
}
oldArray = newArray;
这是最便于记忆的方法吗?
垃圾收集会安全地处理我没有推到的子数组吗newArray?
- newArray是否会以某种方式分散在内存中,从而阻止该方法有效扩展
javascript原型性质使一切都成为一个对象。所有的对象都是映射,从字面上看就是散列映射。这意味着,当你把对象从一个数组"拉"到另一个数组时,你只是在复制它们的引用。
所以,是的,我想说,如果你放弃引用(至少在现代浏览器中),它不会给你带来太多内存问题。但垃圾收集器的实现方式不同,具体取决于您使用的浏览器。
1-这是最便于记忆的方法吗?
如果你删除引用,是的,这是一种内存友好的方法。你没有像c/c++中那样的free
,为了在chrome上进行测试,我认为你可以调用window.gc()
来调用垃圾收集器。我认为delete
存在或存在,但我不知道它是如何工作的。
2-垃圾收集会安全地处理我没有附加到newArray的子数组吗?
如果没有任何其他引用指向它们。对循环内存泄漏在旧浏览器中很常见,但对于新浏览器,可以肯定地说是的。
3-newArray是否会以某种方式分散在内存中,从而阻止该方法有效扩展?
是的,它会分散在内存中,因为在javascript中,数组的工作方式类似于哈希图或链接的哈希图(如果我错了,请有人纠正我),但垃圾收集器会处理它,因为它用于处理映射。同样,您只使用对象将保持在同一位置的引用,并且只将引用存储在数组中。
1.no…fmsf基本上是正确的,但为了提高页面加载时间和检查条件的时间,您可以进行一些微优化。如果你在循环中保留oldArray.length,它会在每次迭代的oldArray对象上查找长度,这可能会在大循环中增加一些时间,同时实例化所有变量也可以节省一些时间,如果其中包含的方法被多次调用的话
当有人下载你的脚本时,最好让所有变量的名称尽可能短,这样从服务器到客户端的数据传输就最少了。
var nA = [],
i = 0,
t = oA.length,
s;
for (; i < t; i++) {
s = oA[i];
if (s[p] == v) {
nA.push(s[i]);
}
}
oA = nA;
如果你想认真对待,你可以使用代码缩小程序来重命名变量和删除空白。
2.是的,JavaScript在这些方面做得很好,你唯一需要注意的是IE关闭,这不会由你的代码引起。我仍然发现,在极少数情况下,闭包在IE9中很普遍,但在特殊情况下,这些闭包通常是由链接到DOM引起的,在这种情况下这是无关紧要的。
3.不,这个代码唯一改变的是对对象的引用,而不是它们在内存中的存储方式。
- javascript:更改应用到的数组的数组方法列表
- 使用Knockout.js的数组方法将地图标记添加到Google地图
- 模拟 javascript 的数组方法.面向对象的Javascript,作者:Stoyan Stefanov
- ECMA5 数组方法 - 查找数组中某个类型的第一个对象
- 在 Object.prototype 上为 NodeList 对象实现数组方法是否是一个很好的实践?
- 有没有一种方法可以实现chain.push和.shift数组方法
- 'document.getElementsByClassName' 的结果没有定义像 'map' 这样的数组方法,即使它
- JavaScript重写数组方法
- 有谁能告诉我在Shift的引擎盖下发生了什么吗?JavaScript中的Unshift()数组方法
- 如何删除数据库使用数组方法DELETE
- .push数组方法不工作角过滤器
- 包含数组方法的JavaScript函数没有返回期望的结果
- 对象/数组方法:修改原始的还是创建新的?指导方针
- 用自定义方法替换本机对象(数组)方法:是否安全?兼容的
- Javascript数组方法查找超过第一个值的indexOf
- 数组方法"some"的使用:收到意外的结果
- Javascript:使对象继承数组方法
- 使用数组方法遍历列表项
- 使用数组方法时返回方括号的函数
- 数组方法和连接函数组合输出在 javascript 中无法理解