Аватар для suharik
261 / 247 / 57
Регистрация: 03.09.2010
Сообщений: 805

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

30.10.2012, 17:57. Показов 653. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru