2015-09-22 2 views
0

У меня есть набор элементов: var treeItems = [];. treeItems.length возможно 5-30 (может быть, 50), но каждый treeItem - довольно большой объект. Я должен сделать оба: итерации через пункты & получить элемент по id.ES6 Стоимость итерации карты

Я рассматриваю возможность замены массива на es6 Map. И для итерации через использование карты: Array.from(treeItemsMap.values()) операция.

Вопрос: Какова стоимость (время/память) Array.from(map.values())?

P.S. Я делаю SPA для мобильных устройств, поэтому использование памяти также существенно.

+2

Довольно широкий вопрос, но я бы не использовал 'Array.from' для итерации, поскольку вы каждый раз создавали новый массив -' for..of', вероятно, был бы более уместным. Являются ли ваши идентификаторы не последовательными или являются только индексами? – CodingIntrigue

+0

Почему не только структура данных вроде этого {tree_item_id: tree_item, ...}; O (1) –

+0

@ elio.d да, это именно то, что я хочу сделать –

ответ

5

The spec говорит:

объект Карта должна быть реализована с использованием либо хэш-таблицы или другие механизмы, которые, в среднем, обеспечивают время доступа, которые сублинеен на количество элементов в коллекции.

Конкретная стоимость зависит от реализации.

Использование Array.from будет просто скопировать данные в массив, и это бесполезно уничтожает память. Лучше итерации карты.

Примечание. 50 элементов - это очень маленькие данные. Я не думаю, что в карте важны огромные объекты. Помните, что JS - это язык с переходом, но в случае объектов это значение является ссылкой. Таким образом, карта будет содержать только 50 ссылок на объекты, которые будут храниться отдельно. Итерирование или доступ к этой крошечной карте не должно дорого стоить.

+0

, вы имеете в виду, что каждый браузер имеет собственную реализацию? Если нет, где я могу найти реализацию? –

+0

@V_B Да, каждый браузер имеет свою собственную реализацию. ES предлагает реализацию, но «* Структуры данных, используемые в этой спецификации объектов Map, предназначены только для описания требуемой наблюдаемой семантики объектов Map. Она не предназначена для жизнеспособной модели реализации. *« – Oriol

+0

@Oriol: «Реализация «предложенный» спецификацией ES не выполняет их сложности. Он действительно служит только для определения наблюдаемой семантики. – Bergi

Смежные вопросы