У меня есть ряд данных, и размер их постепенно увеличивается. Я хочу найти конкретную строку моих данных с ее идентификатором. У меня есть два варианта. сначала: создайте массив и вставьте каждую новую строку в этот массив, и каждый раз, когда я хочу, чтобы строка просто просматривала элементы в массиве или использовала функцию прототипа массива (найти). другой вариант - создать объект, и каждый раз, когда появляется новая строка, просто добавляйте эту строку как свойство (а имя свойства будет идентификатором строки). и когда я хочу найти строку, просто получите свойство этого объекта по его имени (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: я где-то читал, что добавление новых свойств к существующему объекту обходится слишком дорого.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что ж, в первом примере вам придется каждый раз перебирать массив при использовании Find.
Во втором примере вы получите доступ к свойству напрямую, что приведет к времени выполнения O (1), всегда фиксированному, независимо от того, сколько элементов там. Так что для лучшей производительности вам следует пойти вторым путем.
Если вы хотите выполнить операцию поиска, вам следует использовать Object, так как он дает лучшую производительность по сравнению с поиском в Array.
Сложность поиска в Object - это O(1), а в Array - O(n). Следовательно, для повышения производительности следует использовать Object.
@MohammadHomayooni - В случае добавления также не будет проблем с производительностью. Кроме того, в случае edit Object дает лучшую производительность.
Чтение из объектов происходит быстрее и занимает O (1) раз, как только что сказал @NikhilAggarwal. Но недавно я читал об оптимизации V8 и хотел проверить, поэтому использовал тестовый js для подтверждения.
Вот мои выводы -
Количество записей в obj или arr: 100000
Если мы уменьшим количество записей - количество операций для объекта почти не изменится, но возрастет экспоненциально для массивов.
Количество записей в obj или arr: 100
Количество записей в obj или arr: 10
Стоимость добавления новых свойств к существующему объекту не снижает эффективность его времени доступа или нет?