Ответы пользователя по тегу JavaScript
  • Какими способами можно получить первое попавшееся изображение?

    Vertenz
    @Vertenz
    Мечтетель
    Самый простой способ это добавить поле на бэке в основное тело сущности при учете определенных фильтров, например цвета. И надо декомпозировать, чтобы не тащить все вплоть до изображения. Не очень понятно что значит перво попавшуюся, вряд ли же подойдут и из других товаров и ведь нужно отталкиваться от правильно выбранного цвета?

    Но если ответ всегда такой, то можно так, возьмем для пример один из присланных вами товаров и распарсим.
    const jsonString = `{"items":[{"id":2,"title":"Футболка","slug":"futbolka","price":1000,"colors":[{"id":77,"color":{"id":27,"title":"white","code":"#ffffff"},"gallery":[{"file":{"url":"ссылка на изображение","name":"36efa79c31cb4400f8f9ce69a7d6f6a6.png","originalName":"Rectangle 13++.png","extension":"png","size":"63.5 Кб"}}]}],"seasons":[{"id":3,"title":"Лето","code":"summer","productsCount":10}],"materials":[{"id":1,"title":"Хлопок","code":"cotton","productsCount":6},{"id":2,"title":"Шерсть","code":"wool","productsCount":4}]}]}`;
    
    const data = JSON.parse(jsonString);
    
    // дальше перебором ищем где есть изображение
    if (data?.items[0]?.colors.length) {
    for (let i = 0; i <= data.items[0].colors.length; i++) {
       // проваливаемся в еще один цикл уже на элементы в gallery, и там ищем url, и если есть то заканчиваем цикл через r
       for (let j = 0; j <= data.items[0].colors[i].length; j++) {
         //и еще цикл на галерии
       for (let n = 0; n <= data.items[0].colors[i].gallery.length; j++) {
         if (data?.items[0]?.colors[i]?.gallery[n]?.url) {
         return data.items[0].colors[i].gallery[n].url;
       }
    }
    
       }
    }
    }
    
    // не забудьте дописать выход из всех циклов

    но это выглядит очень странно, можно еще чрез forEach, но его не оставить, тч если будет миллион товаров то все упадет

    items.forEach(item => {
      const keys = Object.keys(item);
      let imageKey = '';
    
      keys.some(key => {
        if (typeof item[key] === 'object' && item[key] !== null) {
          const subkeys = Object.keys(item[key]);
          const file = subkeys.find(subkey => {
            if (typeof item[key][subkey] === 'object' && item[key][subkey] !== null) {
              return item[key][subkey].hasOwnProperty('url');
            }
            return false;
          });
          if (file) {
            imageKey = key;
            return true;
          }
        }
        return false;
      });
    
      return `${item.title}"  "${imageKey}`; 
    // можно дальше делать что угодно с ключем или сразу брать изображение 
    });


    Но честно говоря я бы еще раз подумал над ТЗ :) И точно бы вел довел бы до дочернего элемента только содержимое gallery и тогда можно обойтись без этих безумств. И проверить уже только элементы внутри gallery
    Ответ написан
  • Как динамически импортировать EditorJS в Vue 3?

    Vertenz
    @Vertenz
    Мечтетель
    можно попробовать через определение того что процесс на клиенте
    if (process.client) {
      import('editorjs').then(EditorJS => {
        // Здесь можно использовать EditorJS
        const editor = new EditorJS(/* настройки */);
      });
    }
    Ответ написан
    Комментировать
  • Ошибка eslint,ошибка есть-но ошибку по какой-то причине не выводит?

    Vertenz
    @Vertenz
    Мечтетель
    а это вся ошибка которую отдает линт? и настроен ли в редакторе кода линт, так можно посмотреть хотя бы строчку на которую ругается? Может ругаться на |. Проверь так
    <template>
      <div class="navbar">
        <nav>
          <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> | <router-link to="/test">Test</router-link>
        </nav>
      </div>
    </template>
    Ответ написан
    Комментировать
  • Как исправить CORS ошибку?

    Vertenz
    @Vertenz
    Мечтетель
    Сервер локальный?
    В настройках сервера надо указать прием заголовков, вот несколько примеров (на всякий случай напишу с разрешенными всеми заголовками, измените для себя на те, что нужны именно вам):
    • nginx:
      if ($request_method = 'OPTIONS') {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Headers' '*';
              ddd_header 'Access-Control-Allow-Methods', '*';
              return 204;
           }
           if ($request_method = 'POST') {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Headers' '*';
              ddd_header 'Access-Control-Allow-Methods', '*';
           }
           if ($request_method = 'GET') {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Headers' '*';
              ddd_header 'Access-Control-Allow-Methods', '*';
           }


    • node.js: res.header('Access-Control-Allow-Methods', '*');
    • php:
      header('Access-Control-Allow-Origin: *');
      header('Access-Control-Allow-Methods: *');



    если не поможет присылайте результат, попробуем разобраться
    Ответ написан
    1 комментарий