@Serzio

Как обратиться к объекту в массиве, зная значение его свойства не через цикл?

Данные в объектах постоянно обновляются. Обращаться к объектам нужно часто по их свойствам. Слишком много циклов в приложении получается. Вот думаю, может не знаю какой то хак в JS, как обойтись без циклов.
На всякий случай пример на пальцах:
[{a, b, c}, {a, b, c}, {a, b, c}]
Известно значение b. Как без цикла найти элемент массива у которого b равно этому значению
  • Вопрос задан
  • 10098 просмотров
Пригласить эксперта
Ответы на вопрос 2
@lemme
Frontend
только перебором.

[{id: 1}, {id: 2}].find(item => item.id === 1) //{id: 1}


UPD
Можно попробовать нормализовать данные, т.е сделать плоский объект, который будет хранить значения нужного объекта и указывать на его индекс
const data = [
	{ id: 1, title: 'foo', notUniqueKey: 1 },
	{ id: 2, title: 'bar', notUniqueKey: 2 },
	{ id: 3, title: 'baz', notUniqueKey: 1 },
]

const flatify = (data = [], uniqueKeys = []) => {
	const o = {}
	
	data.forEach((item, index) => {
		Object
			.keys(item)
			.forEach(key => {
				if (uniqueKeys.indexOf(key) !== -1) {
					o[item[key]] = index
				}
			})
	})
	
	return o
}

const bindings = flatify(data, ['id', 'title'])

console.log(data[bindings[1]]) // по id
console.log(data[bindings['baz']]) // по title
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
может не знаю какой то хак в JS, как обойтись без циклов
Есть такой хак. Называется "правильный выбор структуры данных". Работает, кстати, не только в js.

Можно, например, вести отдельный словарь, в котором в качестве ключей используются значения свойств, а в качестве значений - индексы в массиве. Или ещё десяток вариантов, всё зависит от структуры и особенностей конкретного приложения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы