[英]ES6 Map iteration cost
我有一個項目數組: var treeItems = [];
。 treeItems.length
可能是5到30(也許是50),但是每個treeItem
都是很大的對象。 我應該同時做:遍歷項目並按ID獲取項目。
我正在考慮用es6 Map
替換array。 要遍歷地圖,請使用: Array.from(treeItemsMap.values())
操作。
問題: Array.from(map.values())
操作的成本(時間/內存)是Array.from(map.values())
?
PS我正在做移動SPA,因此內存使用也很重要。
規格說明:
必須使用哈希表或其他機制來實現Map對象,這些機制通常提供的訪問時間與集合中元素的數量成線性關系。
具體成本取決於實現方式。
使用Array.from
會將數據復制到一個數組中,這將浪費內存。 最好改為迭代地圖。
注意50項是非常小的數據。 我認為在地圖中放置大型物體並不重要。 請記住,JS是一種按值傳遞的語言,但是對於對象而言,該值是一個引用。 因此,地圖將僅包含對對象的50個引用,這些引用將單獨存儲。 迭代或訪問該小地圖應該不會花費太多。
使用.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}
與for(){...}操作者聯系。
我們可以像這樣迭代ES6 Map:
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.