Поиск объектов в массиве
Доброго времени суток всем.
Подвернулось задание- Имеется массив с объектами, имеющими поле «id» с уникальными значениями в пределах этого массива. Требуется искать объекты в этом массиве, имеющие определенное значение «id». Плюсы и минусы. Самый очевидный способ(тупо перебрать массив до попадания) я сделал. Сначала для теста массив создал. function Obj(id){ this.id = id } var arr = []; for (var j = 0; j < 5000000; j++){ var obj = new Obj(j); arr.push(obj); } var init="time"; const FINDID = 4999999; function findEl(array) { for (var i = 1; i < (array.length + 1); i++){ if (array[i].id == FINDID){ console.log ("this is " + i + " element"); break } } } console.time(init); findEl(arr); console.timeEnd(init); Написал, что если большое количество объектов, то поиск возможно долгий будет. По времени функция такая ~120.000ms выполняется. НО. Какие варианты еще есть? Может кто поможет? Может еще взять все объекты из массива, склеить их в строку, разделяя чем- нибудь, типа (obj1.id тут уже строковая будет) var str = "obj1.id#obj2.id#и так далее"; и потом уже искать в строке. Но это порнография какая- то уже получается, да и, наверняка долго будет. Я новичок в программировании, особо не хайте:) Спасибо огромное тому, кто наведет на путь истинный |
Цитата:
|
Я затупил что - то)) Спасибо
for (var i = 0; i < array.length; i++){ if (array[i].id == FINDID){ console.log ("this is " + (i + 1) + " element"); break } } А по самому варианту поиска подскажет кто- нибудь? |
Lynatik,
если вы сами формируите массив -- то можно создать обьект где ключами будут id, а значениями индексы массива, тогда поиск будет почти мгновенный. |
Цитата:
Можно ли, пожалуйста, немного поподробнее? желательно с парой строчками кода |
|
nerv_ спасибо, но это не то вроде. Вдруг id не по порядку идут
рони вроде понял, про что Вы говорите. но что- то не допру как сам цикл сделать, где ассоциативный массив заполняем id-шниками |
Цитата:
var hash = {}; hash[ 'key' ] = 'value'; alert( hash.key ); |
Цитата:
var hash = {}; function Obj(id){ this.id = id } var arr = []; for (var j = 0; j < 5000000; j++){ hash[j] = j; var obj = new Obj(j); arr.push(obj); } var init="time"; const FINDID = 4999999; function findEl() { return hash[FINDID] } console.time(init); findEl(arr); console.timeEnd(init); |
Lynatik,
Цитата:
function Obj(id){ this.id = id } var arr = []; for (var j = 0; j < 5000000; j++){ var obj = new Obj(j); arr.push(obj); } var init="time"; const FINDID = 4999999; function findEl(array) { array[array.length] = new Obj(FINDID); for (var i = 0; array[i].id != FINDID ; i++){} if (i == (array.length - 1)) alert( "Искомое значение не найдено." ); else alert( i ); } console.time(init); findEl(arr); console.timeEnd(init); |
Часовой пояс GMT +3, время: 11:04. |