Поиск объектов в массиве
Доброго времени суток всем.
Подвернулось задание- Имеется массив с объектами, имеющими поле «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, время: 12:44. |