我有一个项目数组:var treeItems = [];。treeItems.length可能是5-30 (也许50),但是每个treeItem都是相当大的对象。我应该两者都做:迭代条目&按id获取条目。
我正在考虑用es6 Map替换数组。并迭代地图使用:Array.from(treeItemsMap.values())操作。
问题: Array.from(map.values())操作的成本(时间/内存)是多少?
我正在为手机做SPA,所以内存的使用也很重要。
发布于 2015-09-22 15:48:01
等级库说:
必须使用哈希表或其他机制来实现Map对象,这些机制平均提供的访问时间与集合中元素的数量呈次线性关系。
具体成本取决于实现。
使用Array.from只会将数据复制到数组中,这就浪费了不必要的内存。最好把地图迭代一下。
注50项是一个非常小的数据。我不认为地图上有巨大的东西有什么关系。记住JS是一种按值传递的语言,但是如果是对象,则该值是一个引用。因此,映射将只包含对对象的50个引用,这些对象将单独存储。迭代或访问这个小地图不需要花费太多。
发布于 2018-10-30 13:54:16
使用.map()迭代器进行处理。
我们可以对Maps使用一个简单的技巧,因为Maps没有map()这样的操作。由Axel Rauschmayer博士建议:*将映射转换为键值对数组。*映射或过滤数组。*将结果转换回地图。
示例:
let map0 = new Map([
["a", 1],
["b", 2],
["c", 3]
]);
const map1 = new Map(
[...map0]
.map(([k, v]) => ['_' + k, v * 2])
);结果是
{'_a' => 2, '_b' => 4, '_c' => 6}发布于 2018-10-30 13:56:27
使用(){.}运算器进行处理。
我们可以像这样迭代ES6地图:
let map0 = new Map([
["a", 1],
["b", 2],
["c", 3]
]);
let map1 = new Map();
for (let [key, value] of map0) {
map1.set('_' + k, v * 2);
}结果是
{'_a' => 2, '_b' => 4, '_c' => 6}https://stackoverflow.com/questions/32720855
复制相似问题