簡體   English   中英

ES6地圖迭代成本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM