XtReLL
@XtReLL

Как обработать массив объектов attachments VK API?

Здравствуйте. Получаю предложенные посты методом wall.get, для дальнейшей обработки данных.
После эти данные передаются в метод wall.post.

Вот пример запроса wall.get:
const content = await vk.api.wall.get({
     owner_id: config.idGroup,
     filter: 'suggests'
   });
  },


А вот сам запрос публикации поста, wall.post :
const suggestsPost = await vk.api.wall.post({
      owner_id: config.idGroup,
      post_id: content.id,
      from_group: from_groupFlag,
      signed: signedFlag
    });


Суть такова, пользователь предлагает запись, мы получаем эту запись и публикуем по id поста
Конечно документация обязывает передавать текст или приложенный контент(attachments), но если с текстом нет проблем, даже если его не передавать в запросе, то с приложениями(attachments) не всё так хорошо. Из всего массива, публикуется только первый элемент. Предложили 2 фотографии, опубликуется только первая. Связи с этим, появилась нужда передавать параметр attachments в методе wall.post, но не понятно, как перебирать сами свойства объектов и передавать в метод wall.post.

Вот пример как выглядит массив объектов attachments, что мы получаем.
Кнопка
5dcbc2d8390e9456285111.png


А вот пример, как должен выглядеть сам параметр attachments .
Кнопка
5dcbc38929d74987282814.png


Вот, как я пытаюсь реализовать парсинг данных.
let attachments = content.attachments;//помещаю массив в отдельную переменную
    let attach = new Array();//объявление итогового массива
    for (var i = 0; i < attachments.length; i++) {
      let attachType = attachments[i].type;//тип контента
(x)  let attachId = attachments[i].attachType.id;//id контента
(x)  let attachOwner = attachments[i].attachType.owner_id;//id владельца контента
      attach[i] = attachType + attachOwner + '_' + attachId;
    }
        if (attachments.length > 1) {
      let attachResult = attach.join(',');
    }
    else {
      let attachResult = attach;
    }
    console.log(attachResult);

    const suggestsPost = await vk.api.wall.post({
      owner_id: config.id.groupID2,
      post_id: content.id,
      attachments: attachResult,
      from_group: from_groupFlag,
      signed: signedFlag
    });


Проблемные строчки помечены значком '(x)' . Я не могу понять, как стоит обращаться к объекту, если его свойства зависят друг от друга.

Конечно, как вариант, можно через switch создать кучу кейсов и смотреть, по type, но это не надежно, так-как любое изменение в названии или добавлении нового типа приведет к проблеме. Хочется, что бы программа сама распознавала название и могла обращаться по нему.
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
@StockholmSyndrome
почитайте про доступ через квадратные скобки
const attachType = 'photo'; 

obj.attachType // вернёт obj.attachType
obj[attachType] // вернёт obj.photo


да и не нужна эта простыня, когда всё решается парой строчек
const attachments = content.attachments
  .map((o) => `${o.type}${o[o.type].owner_id}_${o[o.type].id}`)
  .join(',');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы