@twoDolphins

Как обратиться к нужному элементу массива?

Здравствуйте. Есть массив из объектов. У каждого объекта есть поле name. Можно ли как-то быстро, не перебирая весь массив, вернуть элемент с определённым полем name, если я не знаю индекс этого элемента в массиве?
  • Вопрос задан
  • 627 просмотров
Решения вопроса 1
Fzero0
@Fzero0
Вечный студент
Array = [{name:'test', lastname: 'test', gender:'f'},{name:'test1', lastname: 'test1', gender:'f'},{name:'test2', lastname: 'test2', gender:'m'}];

var result = $.grep(Array, function(e){ return e.name == "test1"; });

console.log(result);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Нет. Массив в любом случае нужно перебирать.
Ответ написан
Комментировать
surefire
@surefire
Чтобы не перебирать массив каждый раз нужно рядом хранить объект - карту массива по нужному полю, как аналог индекса в базе данных. Но нужно заботиться об актуальности такого индекса, добавлять и удалять от туда данные при изменении массива.
var arr = [
  {id: 0, name: 'aaa'},
  {id: 1, name: 'ccc'},
  {id: 2, name: 'bbb'},
  {id: 3, name: 'ccc'},
  {id: 4, name: 'bbb'},
];

arr.mapNames = arr.reduce( (map, obj, i)=> {
	if(obj.name in map)
	 	map[obj.name].push(i);
	else
	 	map[obj.name] = [i]
	return map;
}, Object.create(null) );

var bbb = ( arr.mapNames['bbb'] || [] ).map( i => arr[i] );

/*  Получим  [ { id: 2, name: 'bbb' }, { id: 4, name: 'bbb' } ] */
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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