首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6映射迭代成本

ES6映射迭代成本
EN

Stack Overflow用户
提问于 2015-09-22 15:23:54
回答 3查看 894关注 0票数 2

我有一个项目数组:var treeItems = [];treeItems.length可能是5-30 (也许50),但是每个treeItem都是相当大的对象。我应该两者都做:迭代条目&按id获取条目。

我正在考虑用es6 Map替换数组。并迭代地图使用:Array.from(treeItemsMap.values())操作。

问题: Array.from(map.values())操作的成本(时间/内存)是多少?

我正在为手机做SPA,所以内存的使用也很重要。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-22 15:48:01

等级库说:

必须使用哈希表或其他机制来实现Map对象,这些机制平均提供的访问时间与集合中元素的数量呈次线性关系。

具体成本取决于实现。

使用Array.from只会将数据复制到数组中,这就浪费了不必要的内存。最好把地图迭代一下。

注50项是一个非常小的数据。我不认为地图上有巨大的东西有什么关系。记住JS是一种按值传递的语言,但是如果是对象,则该值是一个引用。因此,映射将只包含对对象的50个引用,这些对象将单独存储。迭代或访问这个小地图不需要花费太多。

票数 7
EN

Stack Overflow用户

发布于 2018-10-30 13:54:16

使用.map()迭代器进行处理。

我们可以对Maps使用一个简单的技巧,因为Maps没有map()这样的操作。由Axel Rauschmayer博士建议:*将映射转换为键值对数组。*映射或过滤数组。*将结果转换回地图。

示例:

代码语言:javascript
复制
let map0 = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

const map1 = new Map(
  [...map0]
  .map(([k, v]) => ['_' + k, v * 2])
);

结果是

代码语言:javascript
复制
{'_a' => 2, '_b' => 4, '_c' => 6}
票数 1
EN

Stack Overflow用户

发布于 2018-10-30 13:56:27

使用(){.}运算器进行处理。

我们可以像这样迭代ES6地图:

代码语言:javascript
复制
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);    
}

结果是

代码语言:javascript
复制
{'_a' => 2, '_b' => 4, '_c' => 6}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32720855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档