Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для suharik
261 / 247 / 57
Регистрация: 03.09.2010
Сообщений: 805

Логическая задачка с объектами

30.10.2012, 17:57. Показов 647. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Сразу к делу..
Пытаюсь написать что-то типа поиск по объектам с параметрами.
Дано:
JavaScript
1
2
3
4
5
6
7
8
  var obj = [
            {id:1,group:1,dat:5},
            {id:2,group:1,dat:4},
            {id:3,group:2,dat:2},
            {id:4,group:2,dat:6},
            {id:5,group:3,dat:4},
            {id:6,group:1,dat:5},
        ]
Хочу в этом объекте найти записи у которых у которых есть нужные мне значения.
Пример того как я хочу это видеть в виде запроса
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  foo({
       group:1,
       dat:5,
   });  //Должно вернуть записи с id 1 и 6
 
  foo({
       group:2,
   });  //Должно вернуть записи с id 3 и 4
 
  foo({
       id:5,
   });  //Должно вернуть записи с id 2 и 5
 
  foo({
       dat:4,
   });  //Должно вернуть записи с id 5
Вот, собственно вопрос, как должна выглядеть функция foo() ?
Зарание спасибо за помощ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2012, 17:57
Ответы с готовыми решениями:

Логическая задачка
Всем привет. Решил ради интереса написать пасьянс, да вот заглох, не успев начать:) Вот код: <!DOCTYPE HTML PUBLIC...

Логическая задачка
Здравствуйте. Помогите решить задачку. Имеется 100 рублей. Стоимость курицы 1,5 рубля, овечки 2 руб. , бычка 5 руб. Вопрос: сколько...

Разминка (логическая задачка)
как узнать наименьшими усилиями после какого порядкя отличаются два числа. Т,е например. есть число 2222 и число 2230 (правильные...

4
 Аватар для basili4
201 / 199 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
30.10.2012, 18:05
Если объект будет большой. То будет очень долго. в данном случае это полный перебор записей и поиск совпадений.
0
 Аватар для suharik
261 / 247 / 57
Регистрация: 03.09.2010
Сообщений: 805
30.10.2012, 18:08  [ТС]
Объект будет не столь большой чтобы тормозить систему.
Я уже попытался сделать двумя циклами, но так и недопетрил как это в и тоге должно работать.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
30.10.2012, 21:09
в самом первом приближении:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var obj = [
          {id:1,group:1,dat:5},
          {id:2,group:1,dat:4},
          {id:3,group:2,dat:2},
          {id:4,group:2,dat:6},
          {id:5,group:3,dat:4},
          {id:6,group:1,dat:5}
          ];
 
function foo (query, mask)
{
var PropVal = new Object (), L = 0, VirtArr = [];
 
for (var key in query) PropVal [key] = query [key], L++;
 
for (var j = m = 0, lj = obj.length; j < lj; m = 0, j++)
   {
   for (key in obj [j]) if (PropVal [key] == obj [j] [key]) m++;
 
   if (m == L) VirtArr [VirtArr.length] = obj [j];
   }
 
if (!mask) return VirtArr;
 
for (var PrintArr = [], j = 0, lj = VirtArr.length; j < lj; j++)
   {
   PrintArr [j] = '{';
 
   for (key in VirtArr [j]) PrintArr [j] += key + ':' + VirtArr [j] [key] + ',';
 
   PrintArr [j] = PrintArr [j].slice (0, -1) + '}';
   }
 
return PrintArr.join (mask);
}
 
alert (foo ({group:1, dat:5}, '\n'));
 
// document.write (foo ({group:2}, '<br>')); // или такой вывод
 
// var myObj = foo ({dat:4}); // если без маски, то вернет виртуальный массив из объектов
для не-MSIE браузеров можно оформить покрасивше и покороче - используя методы forEach () и filter ()
------

но вообще, если исходный массив (ваш объект является zero-индексным массивом) будет велик
и функция гарантированно будет много раз вызываться,
то можно сэкономить время, но, правда, путём использования дополнительной памяти в глобале:
-- при первом (длительном) вызове параллельно создать глобальные хеш-массивы по значениям всех свойств
-- при втором и последующих вызовах зато будет "летать"
------

и, кстати, почему
Цитата Сообщение от suharik Посмотреть сообщение
foo({ id:5, }); //Должно вернуть записи с id 2 и 5
описАлись?
0
 Аватар для suharik
261 / 247 / 57
Регистрация: 03.09.2010
Сообщений: 805
30.10.2012, 21:18  [ТС]
для не-MSIE браузеров можно оформить покрасивше и покороче - используя методы forEach () и filter ()
Делаю для хрома. Было бы круто покороче сделать.

описАлись?
Да, копипаст))

Сейчас протестирую на скорость.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2012, 21:18
Помогаю со студенческими работами здесь

логическая задачка на пролог-д
Задачка: Пришла весна. Четверо друзей – Костя, Вадим, Слава и Марат – влюбились в девушек (в различных!) и решили, что каждый подарит...

Логическая задачка для дошкольников :3
Здравствуйте ,задание формулируется так : Антон и Максим носят фамилии Шилов и Гвоздев. Какую фамилию носит каждый из них, если Максим с...

Логическая задачка из ЕГЭ по информатике
Приветствую всех! Сдавал я как то ЕГЭ по информатике и в целом ничего так, но вот логическая задачка меня вогнала в ступор. Точное ее...

SWI Prolog: Назвать фамилии слесаря, токаря и сварщика
На заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов, Иванов и Семенов. У слесаря нет ни братьев, ни сестер. Он...

Логическая задачка про гирьки!
Алеша, Витя и Игорь после уроков нашли на полу в кабинете физики маленькую гирьку. Каждый из них, рассматривая находку, высказал два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru