Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 17

Доступ к свойствам объекта

16.06.2020, 15:30. Показов 1434. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно составить ul-список, взяв несколько полей из каждого файла JSON. Получить нужные данные удалось, но после этого столкнулся с другой проблемой.



Как показывает консоль, объект не пустой. Консоль также отображает индексы. Но я не могу получить доступ к свойствам по индексу.

Вот код:

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
42
function search_in_JSON(desired_field, link) {
    let result = {};
    if (desired_field) {
        $.getJSON(link, function (data) {
            $.each(data, function (key, datum) {
                $.each(datum, function (key_of_datum, value) {
                    if (key_of_datum === desired_field)
                        result[String(key)] = value;
                });
            });
        });
        return result;
    }
    else {
        $.getJSON(link, function (data) { result = data });
        return result;
    }
}
 
$(document).ready(function() {
    let items = [];
    let users_names = search_in_JSON('name', 'ссылочка1');
    console.log(users_names);
    console.log(users_names[0]);
    console.log(users_names[1]);
    $.each(users_names, function (key_of_name, user_name) {
        console.log(key_of_name + ' and ' + user_name);
        let albums = search_in_JSON('', 'ссылочка2' + (key_of_name+1));
        items.push('<ul class="user">');
        $.each(albums, function (key_of_album, album) {
            items.push('<li><ul class="album">');
            let photos = search_in_JSON('', 'ссылочка3' + album.id);
            $.each(photos, function (key_of_photo, photo) {
                items.push('<li><img src="' + photo.url + '"  alt="' + photo.title + '"/></li>');
            });
            items.push('</ul></li>');
        });
        items.push('</ul>');
    });
    items = items.join('');
    $('.albums').html(items);
});
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2020, 15:30
Ответы с готовыми решениями:

Обращение к свойствам объекта
Доброго времени суток. У меня есть JSON файл, в котором есть лишь наборы массивов, мне нужна возможность обратиться к этим элементам при...

Доступ к свойствам TextBox на javascript
Добрый день, уважаемые Знатоки! Пишу под ASP.NET скрипт на javascript. На Web страницe размещен TextBox.Мне нужно, чтобы он становился...

Как получить доступ к свойствам кнопки?
Как получить доступ к свойствам кнопки? в объекте INPUT TYPE=file Необходимо изменить ее название. Текже, хотелось бы установить фильтр...

6
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
16.06.2020, 19:17
Чего то напоминает абракадабру ) Я так понял вам нужно разобрать json и вывести в блок ?

Добавлено через 13 минут
Дайте образец json объекта и задачу которую нужно с ним сделать. Попробуем чего нить соорудить.
1
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 17
16.06.2020, 19:30  [ТС]
Дайте образец json объекта и задачу которую нужно с ним сделать. Попробуем чего нить соорудить.
json.zip

Нужно вывести вложенный список. Список юзеров, каждый юзер - это вложенный список его альбомов. Альбом в свою очередь - список фотографий. Юзеры, альбомы и фотографии находятся в разных json-файлах.
Поиск по json я, вроде, сделал, во всяком случае имена юзеров в консоль выводит (скрин в главном сообщении темы). Но вытащить эти имена из объекта, в котором они хранятся, я не могу
0
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 17
16.06.2020, 19:30  [ТС]
Думал дело в том, что ajax-запрос не успевает выполниться, однако введение промисов не помогло. Ну или я их как-то неправильно ввёл)
0
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
16.06.2020, 19:55
Файлы будут читаться именно с локального диска ?

Добавлено через 24 секунды
файлы json которые
1
0 / 0 / 0
Регистрация: 27.02.2019
Сообщений: 17
16.06.2020, 20:10  [ТС]
Файлы будут читаться именно с локального диска ?
Удалённого
Через параметры ссылки (после знака вопроса) я указывал id элемента и далее результат записывал в ассоциативный массив

Добавлено через 2 минуты
Если поле desired_field непустое, то идёт выборка по нему. В таком случае в массив сохраняются только поля с именем из desired_field
0
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
17.06.2020, 05:32
Лучший ответ Сообщение было отмечено Corathir как решение

Решение

В общем немного посидел с утра, накидал примерно чего хотел. Собственно, выборка по ид или по слову в верхнем уровне объектов. Массив с url измените на свои. Так же вы можете добавить свои функции для сорта.

Кликните здесь для просмотра всего текста

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
42
43
44
45
46
47
48
49
50
const initialCall = (id = false, field = false) => {
 
  let urls = [
    `/json/albums.json`,
    `/json/users.json`,
    `/json/photos.json`
  ]
 
  let requests = urls.map(url => fetch(url))
 
  Promise.all(requests)
  .then(responses => Promise.all(responses.map(res => res.json())))
  .then(jsonObjects => {
 
    if (field) fieldSort(jsonObjects, field)
    if (id) idSort(jsonObjects, id)
  })
}
 
const fieldSort = (data, field) => {
 
  data.map(elem => {
    elem.map(($elem => {
 
      for (const [key, value] of Object.entries($elem))
        if (value === field) display($elem)
    }))
  })
}
 
const idSort = (data, id) => {
 
  const array = []
 
  data.map(elem => {
    elem.map(($elem => {
 
      if($elem.id === id) array.push($elem)
    }))
  })
 
  display(array)
}
 
 
const display = (input) => console.log(input)
 
//initialCall(1)
 
initialCall(false, 'Clementina DuBuque')


Но, если по хорошему, вам нужно делать один запрос за юзерами, далее распечатывать их в html. Делать ссылки к примеру "альбомы юзера", по нажатию на эту ссылку будет следующий запрос за данными альбомов именно этого юзера. Я посмотрел файл альбомов, там 35к записей, я понимаю что для мощного компа перебрать это дело нет труда, но к примеру мобилка может и захлебнуться, посему, вам нужно делать запрос по ссылке именно на альбомы конкретного юзера, по которой сервер пришлет нормальный json а не все альбомы всех юзеров(это не есть хорошо). Так же это упростит работу с отрисовкой данных. Так же и с фотками.

Это если я правильно разобрался в задаче.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2020, 05:32
Помогаю со студенческими работами здесь

Как через js обратиться к css свойствам объекта?
например &lt;div class=&quot;example&quot;&gt;&lt;/div&gt; .example{ width:50px; background-color:gray; height:50px; outline: 1px solid red; ...

Vue js доступ к методам и свойствам верхнего шаблона
у меня есть шаблон, внутри которого ещё шаблон Главный шаблон &lt;script type=&quot;text/x-template&quot;...

Не могу получить доступ к свойствам дочернего компонента из массива
Строка 49 - объявление свойств и 80 - вызов в родительском компонетн. class UserTD extends React.Component { ...

Доступ к свойствам объекта по его имени
Всем привет.. В общем такой вот вопрос. Мне в процессе выполнения программы нужно изменять цвет объекта на форме, при этом я хочу...

Получение доступа к свойствам программно созданного объекта массива из эвента этого же объекта
У меня программно создается массив кнопок, и надо каждой присвоить эвент при нажатии на нее. Как получать доступ к свойствам этих кнопок,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru