Fer*_*aye 4 javascript three.js
我正在制作一个用于从浏览器中的模型中删除几何图形的工具。
在删除过程的某个步骤中,我获取一个充满索引的数组,并从中创建一个 Set 以获取不重复索引的数组。
function GetSetFromArray(array){
return new Set(array);
}
Run Code Online (Sandbox Code Playgroud)
这个功能一开始在很多型号上都运行良好。由于我想尽快处理删除,因此我想避免使用需要 .indexOf 的解决方案。
但是当我尝试从一个大模型中删除时,例如,一个长度约为 15,000,000 的数组。我在浏览器控制台上收到以下错误:
未捕获(承诺) RangeError:超出设置的最大大小

我想知道创建Set的最大尺寸是多少?这是否取决于浏览器?或者在运行浏览器的PC上?有办法得到这个号码吗?我想也许如果我可以获得集合的大小限制,我就可以将数组拆分为一系列集合然后使用它?
包含 Set 中项目的集合在规范中称为“List”,并且未指定List 的大小限制。
这些序列可以是任意长度
- 将 set.[[SetData]] 设置为新的空列表。
因此,它必须是实现定义的。
这是否取决于浏览器?或者在运行浏览器的PC上?
它将取决于浏览器使用的 JavaScript 引擎(例如,V8、SpiderMonkey、JavaScriptCore 等)。
有办法得到这个号码吗?
只是.add将项目放入集合中,直到抛出为止。
const getSetSizeLimit = () => {
let i = 0;
const set = new Set();
while (true) {
try {
set.add(i);
} catch(e) {
return i;
}
i++;
}
return i;
};
console.log(getSetSizeLimit());Run Code Online (Sandbox Code Playgroud)
在我的 Windows-Chrome 上,限制看起来是 16777216,即2 ** 24.
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |