Задать вопрос
  • Почему при сортировке 1 меньше, чем true?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    При приведении типов (во время операции вычитания) true приводится к 1. Эти два значения равны, и в результирующем массиве они следуют в том же порядке. что и в исходном. Можете проверить, поменяв true и 1 местами.
    Ответ написан
    Комментировать
  • Лучший способ изучения Vue?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    1. Правильный: читать документацию и желатьло хорошую книжку и делать тестовые проекты. По времени вы потратите примерно 2-3 месяца
    2. Как обычно: Володя заэстимейти проект! Это срочно! О классно, только вместо ангуляра используем реакт, в остольном клиент согласен. И вот несешься по эстимейту по ходу изучая реакт. Ну а потом читаешь то что пропустил.

    В общем берите книгу и реальный проект. Желательно с VUEX авторизацией роутером и что то сложнее TODO
    Ответ написан
    4 комментария
  • Как можно отрисовать кривую безье через массив с точками?

    twobomb
    @twobomb
    Сложно. Ну что-то наговнокодил.
    Кликай по канвас чтобы ставить точки.
    Пример без анимации
    Ну и пример с анимацией
    Ответ написан
    Комментировать
  • Как посчитать среднее значение данных в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const average = arr => arr.reduce((acc, n) => acc + n, 0) / arr.length;
    const extractValues = (group, item, key) => item[key].forEach(n => ((group.values[n.id] ||= { id: n.id, name: n.name })[key] ||= []).push(n.value));
    
    const result = Object
      .values(arr
        .flatMap(n => n.properties.groups)
        .reduce((acc, n) => (
          acc[n.id] ||= {
            id: n.id,
            name: n.name,
            wellBeing: [],
            values: {},
          },
          acc[n.id].wellBeing.push(n['well-being']),
          extractValues(acc[n.id], n, 'needs'),
          extractValues(acc[n.id], n, 'provision'),
          acc
        ), {}))
      .map(n => ({
        id: n.id,
        name: n.name,
        value: average(n.wellBeing),
        values: Object.values(n.values).map(m => (
          m.needs = average(m.needs),
          m.provision = average(m.provision),
          m
        ))
      }));
    Ответ написан
    5 комментариев
  • Как избавиться от множественного повторения forEach?

    @lolzqq
    HTML,CSS,JS,PHP
    godsplane, на своём опыте столкнулся с тем, что назначать, к примеру прослушиватели события click() на 250 элементов при загрузке страницы - это подвешивать её на 10-15 секунд в небытие
    Подвешивайте событие на <body>, а в обработчик передаёте нажатый элемент, распознаёте его, и, если был нажат нужный элемент - то делаете что-то дальше - фактически вешается один прослушиватель, никаких подвисонов, лагов и forEach для этого.

    Код, типа такого:
    document.querySelector('body').addEventListener('click', function(e) {
       // e.target кликабельный элемент
       // определяем, необходимый ли это эелемент
       if(e.target && (e.target.className.search('needed-element')!== -1){
          // тут работаем дальше с e.target или чем хотите
       }
    }


    P.S. при зажатии ЛКМ на кнопке Открывать - попап сворачивается, а если отпустить ЛКМ - снова разворачивается. Это баг или фича?
    Ответ написан
    6 комментариев
  • Как удалить массив в массиве по конкретному значению?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Используем array_filter:
    <?php
    $results = [
    	['order_id' => 'first', 'id'=>1],
    	['order_id' => 'second', 'id'=>4],
    	['order_id' => 'third', 'id'=>7]
    ];
    
    $filtered = array_filter(
    	$results,
    	function($el) {
    		return $el['id'] != 4;
    	}
    );
    
    var_export($filtered);


    Share PHP code
    Ответ написан
    Комментировать
  • Как в одной строчке уместить вычисление и надпись?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Console.WriteLine($"Площадь вашего круга!  {pi * (Math.Pow(x, 2))});
    Ответ написан
  • Как десериализовать xml с последующим заполнением textbox?

    FoggyFinder
    @FoggyFinder
    У вас xml не соответствует классу.

    0) Нет закрывающего тега (полагаю, это опечатка)
    1) В xml описывает вложенный элемент radiostation тогда как в классах этого типа нет
    2) name это аттрибут, а вы пытаетесь десериализовать как элемент.

    В таких случаях проще не писать классы самому а использовать сервисы, такие как Xml2Csharp

    Вставляем xml, получаем

    [XmlRoot(ElementName = "radiostation")]
    public class Radiostation
    {
        [XmlElement(ElementName = "country")]
        public string Country { get; set; }
        [XmlElement(ElementName = "genre")]
        public string Genre { get; set; }
        [XmlElement(ElementName = "subgenre")]
        public string Subgenre { get; set; }
        [XmlElement(ElementName = "title")]
        public string Title { get; set; }
        [XmlElement(ElementName = "urlwww")]
        public string Urlwww { get; set; }
        [XmlElement(ElementName = "ico")]
        public string Ico { get; set; }
        [XmlAttribute(AttributeName = "name")]
        public string Name { get; set; }
    }
    
    [XmlRoot(ElementName = "users")]
    public class Users
    {
        [XmlElement(ElementName = "radiostation")]
        public Radiostation Radiostation { get; set; }
    }


    Ответ написан на предположении что менять структуру классов допустимо, если это не так то уточните этот момент в комментариях.

    Также небольшое замечание относительно метода LoadFile: вы в нем совсем не используете параметр filePath
    Ответ написан
    Комментировать
  • Как импортировать таблицу Excel в C#?

    FoggyFinder
    @FoggyFinder
    Существует множество библиотек для работы с Excel. Что из них выбрать зависит от задачи (например, нужно только читать данные или нужно формировать полноценный отчет, со стилями и так далее).

    Судя по описанию, здесь вам нужно только чтение, причем с поддержкой устаревшего формата xls, поэтому рекомендую библиотеку ExcelDataReader

    Если у вас .Net Core приложение не забудьте добавить строку

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);


    А теперь пример.

    1. В C# не принято для классов использовать публичные поля, поэтому перепишем их на свойства

    public class Questions
    {
        public string Question { get; set; }
        public string Theme { get; set; }
        public string Description { get; set; }
        public string QuestionEn { get; set; }
        public string DescrEn { get; set; }
    }


    2. Само чтение

    const string FilePath = "sample.xls";
    var qs = new List<Questions>();
    
    using var stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
    using var reader = ExcelReaderFactory.CreateReader(stream);
    do
    {
        while (reader.Read())
        {
            var question = reader.GetString(0);
            var theme = reader.GetString(1);
            var description = reader.GetString(2);
    
            qs.Add(new Questions()
            {
                Question = question,
                Theme = theme,
                Description = description
            });
        }
    } while (reader.NextResult());


    3. Выводим результат

    foreach(var q in qs)
    {
        Console.WriteLine($"{q.Question}");
        Console.WriteLine($"{q.Theme}");
        Console.WriteLine($"{q.Description}");
        Console.WriteLine(new string('-', Console.WindowWidth));
    }


    4. Запускаем, проверяем

    Индейцы в знак примирения хлопали в ладоши
    history
    Они закапывали топор войны
    ----------------------------------------------------------------------------------------------------
    Моряки пропитывали свою одежду смолой, чтобы она не рвалась
    history
    Чтобы она не пропускала воду
    ----------------------------------------------------------------------------------------------------
    Ответ написан
    1 комментарий
  • Альтернатива sockets.io в дотнете?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Ответ написан
    Комментировать
  • Почему не работает алгоритм?

    @Wisdou
    Вот решение за O(n^2), можно сделать за O(n*logn) с помощью сортировки или за O(n) если массив уже отсортирован
    public static int NextId(int[] ids)
    		{
    			for (int i = 0; i < ids.Length; i++)
    			{
    				if (Array.IndexOf(ids, i) == -1)
    				{
    					return i;
    				}
    			}
    			return ids.Length;
    		}
    Ответ написан
    Комментировать
  • Как такое сверстать?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Вот здесь, например, делал когда-то такую вещь (блок "Этапы создания корпоративного сайта").

    605df09f637c9864487824.jpeg

    Идея, вкратце:
    1. Элементы размещаете просто в сетку с помощью inline-block/float/flex/grid - как привычнее.
    2. Родителю задаёте относительное позиционирование, в него помещаете абсолютный элемент на всю ширину/высоту с небольшим запасом, на котором будете рисовать SVG.
    3. Как нарисуется - на js считаете ключевые точки (координаты), через которые нужно провести линии.
    4. Динамически рисуете SVG по вашим ключевым точкам.
      О том, какие варианты вообще есть, можно почитать на MDN, например.
      Выглядеть это будет примерно так:

      605df0b0256ca826129561.jpeg

      В вашем случае рекомендую использовать кривые Безье. Здесь мне нужно было сделать полукруг, поэтому я использовал дуги, у вас же просто статичная величина закругления.
    5. На ресайз окна считаете ключевые точки заново и перерисовываете SVG.
    6. Опционально заморачиваетесь и добавляете сверху ещё один путь, который по скроллу будет "заполняться"


    Это в целом чёрная магия, можно полдня убить, но красиво :)
    Если это всё очень сложно, то просто картинкой вставьте, высоту элементов фиксируйте, и меняйте картинку для адаптивных вариантов.

    Готовых вариантов тут в общем-то вы вряд ли найдёте, нужно взять и разработать.
    У меня была идея оформить это в какую-то библиотеку, но как и все остальные идеи - и ныне лежит в туду-листе на 60+ пунктов. :)
    Ответ написан
    12 комментариев
  • Как такое сверстать?

    RAX7
    @RAX7
    Держи, немного поправил один из своих старых набросков.

    Принцип работы примерно, как описал Максим Морев в своем ответе.
    Ответ написан
    2 комментария
  • Написать функцию, которая принимает строку и выводит статистику о ней: количество букв, количество цифр и количество других знаков?

    @mexvod
    const str = "sdfASfsAFgbd1232b3b2j3b5b23hb5";
        const sumNumbers = str.match(/\d+/g).join('').length;
        const sumLetters = str.match(/[a-z]/gi).join('').length;
        console.log(sumNumbers, sumLetters);
    Ответ написан
    1 комментарий
  • Как разбить массив на части?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const splitArr = (arr, chunks) =>
      Array.from(
        { length: chunks },
        (_, c) => arr.filter((n, i) => i % chunks === c)
      );

    или

    const splitArr = (arr, chunks) =>
      arr.reduce((acc, n, i) => (
        (acc[i % chunks] = acc[i % chunks] || []).push(n),
        acc
      ), []);
    Ответ написан
    Комментировать
  • Как написать функцию которая возвращает все комбинации, меняя одну цифру в строке?

    @abberati
    frontend-разработчик
    const fn = string =>
      Array.from({ length: string.length }, (_, i) =>
        Array.from({ length: 10 }, (_, j) => string.slice(0, i) + j + string.slice(i + 1))
      ).flat()
    Ответ написан
    Комментировать
  • Как написать функцию которая возвращает все комбинации, меняя одну цифру в строке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const xxx = ([...str]) => [...new Set(Array.from(
      { length: str.length * 10 },
      (n, i) => str.map((m, j) => (j === (i / 10 | 0)) ? i % 10 : m).join('')
    ))];
    Ответ написан
    Комментировать
  • Как проверить есть ли элемент в массиве?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    После сплита создаёте лист потом делаете цикл от 0 до длины полученного массива, внутри цикла проверяете значение на валидность если валидно то в лист добавляете его если нет то 0 после цикла вызываете метод ToArray() на листе.
    Ответ написан
    Комментировать
  • Почему такая разница между Nginx и Apache в метрике "Content Download"?

    @rPman
    Скорее всего все зависит от того как приложения отдают http заголовки.

    Когда работает через apache, TTFB ждет долго потому что пока приложение не отработает до конца, даже заголовки не будут отправлены, т.е. время, которое занимает работа приложения это TTFB+content download

    Когда же работает через php fpm, за заголовки отправляются тут же, nginx не ждет когда закончится работа приложения для этого, а значит TTFB маленький (кстати 122мс это ДОЛГО что там происходит?) а уже генерация контента происходит пока идет content download
    Ответ написан
    3 комментария