Доступ к объекту vs доступ к массиву в javascript

У меня есть ряд данных, и размер их постепенно увеличивается. Я хочу найти конкретную строку моих данных с ее идентификатором. У меня есть два варианта. сначала: создайте массив и вставьте каждую новую строку в этот массив, и каждый раз, когда я хочу, чтобы строка просто просматривала элементы в массиве или использовала функцию прототипа массива (найти). другой вариант - создать объект, и каждый раз, когда появляется новая строка, просто добавляйте эту строку как свойство (а имя свойства будет идентификатором строки). и когда я хочу найти строку, просто получите свойство этого объекта по его имени (Id). Теперь я хочу знать, какой вариант наиболее эффективен? (или есть третий вариант?)

первый вариант:

const array = [  
       {  
          "Id":15659,
          "FeederCode":169,
          "NmberOfRepetition":1
       },
       {  
          "Id":15627,
          "FeederCode":98,
          "NmberOfRepetition":2
       },
       {  
          "Id":15557,
          "FeederCode":98,
          "NmberOfRepetition":1
       }
    ]

каждый раз, когда появляется новая строка, в этот массив помещается новая. доступ: array.find(x => x.Id === 15659)

второй вариант:

const object =   {  
       15659:{  
          "Id":15659,
          "FeederCode":169,
          "NmberOfRepetition":1
       },
       15627:{  
          "Id":15627,
          "FeederCode":98,
          "NmberOfRepetition":2
       },
       15557:{  
          "Id":15557,
          "FeederCode":98,
          "NmberOfRepetition":1
       }
    }

каждый раз, когда появляется новая строка, к этому объекту добавляется новое свойство. доступ: object[15659]

edit: я где-то читал, что добавление новых свойств к существующему объекту обходится слишком дорого.

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
192
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Что ж, в первом примере вам придется каждый раз перебирать массив при использовании Find.

Во втором примере вы получите доступ к свойству напрямую, что приведет к времени выполнения O (1), всегда фиксированному, независимо от того, сколько элементов там. Так что для лучшей производительности вам следует пойти вторым путем.

Ответ принят как подходящий

Если вы хотите выполнить операцию поиска, вам следует использовать Object, так как он дает лучшую производительность по сравнению с поиском в Array.

Сложность поиска в Object - это O(1), а в Array - O(n). Следовательно, для повышения производительности следует использовать Object.

Стоимость добавления новых свойств к существующему объекту не снижает эффективность его времени доступа или нет?

Steve 10.07.2018 11:12

@MohammadHomayooni - В случае добавления также не будет проблем с производительностью. Кроме того, в случае edit Object дает лучшую производительность.

Nikhil Aggarwal 10.07.2018 11:17

Чтение из объектов происходит быстрее и занимает O (1) раз, как только что сказал @NikhilAggarwal. Но недавно я читал об оптимизации V8 и хотел проверить, поэтому использовал тестовый js для подтверждения.

Вот мои выводы -

Количество записей в obj или arr: 100000

  1. Количество операций выборки из Obj: 47 174 859 операций в секунду
  2. Номер операции поиска из массива: 612 операций / сек

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

Количество записей в obj или arr: 100

  1. Количество операций выборки из Obj: 44 264 116 операций в секунду
  2. Номер операции поиска из массива: 520709 операций в секунду

Количество записей в obj или arr: 10

  1. Количество операций выборки из Obj: 46 739 607 операций в секунду
  2. Номер операции поиска из массива: 3 611 517 операций в секунду

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