Производительность объекта с массивом по сравнению с массивом - JavaScript

Я делал много алгоритмов в JS, и в некоторых из них более эффективно создавать объект (словарь) для более быстрого (постоянный поиск O (1) или O (N)), а не массив.

например.

const items1 = {
    'a': 2,
    'b': 2
}

эффективнее, чем иметь

const items1 = [
    ['a', 2],
    ['b', 2]
]

для поиска данных с точки зрения времени и (пространства?) сложности?

но что, если бы у меня был массив в качестве значения внутри объекта? это все еще быстрее, чем просто массив?

const items1 = {
    1: [['a', 2]],
    2: [['b', 2]]
}

Ваша сложность смешивания повышается с эффективностью. Не может быть, чтобы ваш первый пример был значительно больше эффективный, чем ваш второй.

Liam 13.03.2019 15:43

"Быстрее" за что? Если вы можете написать items1[foo], это практически мгновенно. Если вам нужно написать items1.find(i => i[0] == foo), это бесконечно медленнее.

deceze 13.03.2019 15:44

В основном всегда будет более эффективно иметь пары ключ-значение в объекте, а не хранить их в виде двухэлементных массивов. Поиск значения по его ключу является (частью) целью использования объектов в JS, поэтому движки всегда оптимизируют это общее использование. Они, вероятно, не будут оптимизировать итерацию по массиву и сопоставление первого элемента, чтобы таким же образом искать второй.

Robin Zigmond 13.03.2019 15:44

так что лучше всего было бы что-то вроде const items1 = {'1': 'a2', '2': 'b2'}?

totalnoob 13.03.2019 15:55

Нет "лучшего"

Liam 13.03.2019 16:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
5
154
1

Ответы 1

and in some of them it's more efficient to create an object (dictionary) for faster (constant lookup O(1) or O(N)) rather than an array

Объекты JavaScript — это не просто словари. Но да, поиск свойства по имени в объекте на много быстрее, чем поиск совпадения в массиве. (Принимая во внимание, что поиск конкретной записи в массиве, скажем, a[0], выполняется так же быстро, если не быстрее, чем поиск свойства в объекте, потому что массивы являются объекты [больше в моем блоге], но могут быть дополнительно оптимизированы до настоящих массивов.)

but what if I had an array as the value within the object? is it still faster than having just an array?

Этого не может быть. Если вы это сделаете, то вам нужно:

  1. Найдите свойство объекта, чтобы получить массив
  2. Посмотрите, что вы хотите в массиве

Принимая во внимание, что если бы вы использовали только массив, вам не понадобился бы шаг 1.


Примечание: у вас слишком много [ и ], если только вам не нужен объект со свойствами, значениями которых являются массивы содержащий. Так:

const items1 = {
    1: ['a', 2],
    2: ['b', 2]
}

так что лучше всего было бы что-то вроде const items1 = {'1': 'a2', '2': 'b2'}?

totalnoob 13.03.2019 15:54

@totalnoob - я не могу понять, что вы пытаетесь сравнить.

T.J. Crowder 13.03.2019 15:58

Другие вопросы по теме