• Как написать promise самому?

    @Roman_Bednyakov
    const deferred = function() {
    this.allFunc = [];
    this.lastResult;
    }
    deferred.prototype.then = function (newFunc) {
    this.allFunc.push(newFunc);
    }
    deferred.prototype.resolve = function (arg) {
    this.lastResult = arg;
    for(let i = 0; i < this.allFunc.length; i++) {
    const item = this.allFunc[i];
    const res = item(this.lastResult);
    if (res instanceof deferred) {
    const lastFuncs = this.allFunc.slice(i+1);
    res.allFunc = lastFuncs;
    break;
    } else {
    this.lastResult = res;
    }
    }
    }

    const d = new deferred();

    d.then(function(res){
    console.log('1', res);
    var d1 = new deferred();
    setTimeout(function(){ d1.resolve("a"); }, 3000);
    return d1;
    });

    d.then(function(res){ console.log("2 ", res); return "b"; });
    d.then(function(res){ console.log("3 ", res); return "c"; });
    d.resolve("hello");
    Ответ написан
    Комментировать
  • Какой алгоритм сортировки представлен?

    0xD34F
    @0xD34F
    похоже на quick
    Ответ написан
    Комментировать
  • Как вам такое решение задачки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как минимум ошибка в том, что arr[i+1] и arr[i+2] будут неопределёнными на последних итерациях цикла.
    Ответ написан
    7 комментариев
  • Как вам такое решение задачки?

    profesor08
    @profesor08 Куратор тега JavaScript
    Твоя функция может вернуть строку, может вернуть число, а может вернуть undefined. Такое не должно происходить. Глянь ниже тестовые данные. Далее ты вручную строишь строки на основе массива, это сильно снижает читабельность кода, если не вникать то вообще не понятно что там происходит.

    function range(array: number[]): string { 
      return array.sort(
        (a, b) => a - b
      ).reduce((acc, next, i) => {
        const prev = array[i - 1];
    
        if (prev !== undefined && next - prev === 1) {
          acc[acc.length - 1][1] = next;
        }
        else {
          acc.push([next]);
        }
    
        return acc;
      }, []).map(
        arr => arr.join("-")
      ).join(", ");
    }
    
    console.log(range([1, 4, 5, 2, 3, 9, 8, 11, 0])); // 0-5, 8-9, 11
    console.log(range([1, 4, 3, 2])); // 1-4
    console.log(range([1, 4])); // 1, 4
    console.log(range([1])); // 1
    console.log(range([])); // ""
    Ответ написан
    Комментировать
  • Как вам такое решение задачки?

    @dimoff66
    Кратко о себе: Я есть
    Немного кривоватое на мой взгляд, я бы сделал так

    const range = arr => arr
       .sort((a, b) => a - b)
       .reduce((agg, v) => {
          const currRange = agg[agg.length - 1]
          if (!currRange || v > currRange.last + 1) {
             agg.push({first: v, last: v})
          } else {
             currRange.last = v
          }
          return agg
       }, [])
       .map(v => v.first + (v.first !== v.last ? '-' + v.last : '')).join()
    Ответ написан
    Комментировать
  • Как вам такое решение задачки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Что меня здесь бесит:

    1. Мутирование переданного массива
    2. Для массивов нулевой и единичной длины результат не строка
    3. Многовато if'ов, слишком сложно

    UPD. Ну и ещё результаты кривоваты. Посмотрите [ 1, 2 ], например. Или [ 5, 6, 8, 9 ].
    Т.е., задача по сути не решена.

    UPD. Варианты решения.

    const range = ([...arr]) => arr
      .sort((a, b) => a - b)
      .reduce((acc, n, i, a) => (
        (n === a[i - 1] + 1) || acc.push([ n ]),
        acc[acc.length - 1][1] = n,
        acc
      ), [])
      .map(([ a, b ]) => a === b ? a : `${a}-${b}`)
      .join(', ');

    const range = arr => ''.concat(...arr
      .slice()
      .sort((a, b) => a - b)
      .reduce((acc, n, i, a) => (
        n !== a[i - 1] + 1 && acc.push(i ? `, ${n}` : n),
        n === a[i - 1] + 1 && n !== a[i + 1] - 1 && acc.push(`-${n}`),
        acc
      ), [])
    );

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

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Готовлюсь к собесу в яндекс
    Рано Вам в Яндекс... задачка то уровня школьных олимпиад...
    Постарайтесь, чтобы решение работало за время k ⋅ log(k) ⋅ n
    А это точно задачка для Яндекса? Она решается за линейное время O(k ⋅ n) если чуть-чуть вникнуть в условия, а логарифмическое решение годно лишь для людей с ЕГЭ головного мозга, там как раз любят решения в стиле "слить все в 1 массив и отсортировать", при использовании qsort/merge-sort как раз будет O(k ⋅ log(k) ⋅ n)

    Если читать из файла по 2 байта, то можно значительно сэкономить память, для формата 1- и 2-значные числа разделенные пробелом этого более чем достаточно.
    Так же выходной массив можно не формировать, а сразу отдавать его на выход.
    P.S. гуглите сортировку подсчетом, а решать задачу за Вас на тостере никто не будет
    Ответ написан
    5 комментариев
  • Как решить задачу с минимальным использованием памяти?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Как решить задачу? Самому.

    Дело в том, что подсказанное решение имеет примерно в 10 раз меньше эффективность обучения. То есть подсказанный вариант вы вряд ли запомните, даже если он будет простым и понятным, и позже не сможете применить в аналогичной ситуации. Нужно, чтобы вы именно сами нашли решение, тогда будет польза.

    Ну а если это ваше реальное тестовое задание на собеседовании, чтобы пройти его, то как бы вообще без комментариев.
    Ответ написан
    Комментировать
  • Насколько решение соответствует ТЗ(React)? Есть ли грубые ошибки?

    @afanasiyz
    Javascript-разработчик
    По коду кажется все ОК (никаких сильных претензий не возникает сходу), только по-моему пагинацию прикрутить вы забыли (она нигде не вызывается).

    UPD: претензии небольшие все таки есть, class Results:
    renderNoResultsMessage() {
        const { results, noResultsMessage } = this.props;
        if (results && !results.length && noResultsMessage) {
          return (<div className="no-result">
            <h3>
              {noResultsMessage}
            </h3>
          </div>);
        }
      }


    Кажется эта функция не очень то renderNoResults, она еще checkForResults, а только потом render - не надо так делать, по коду непонятно. функция, которая renderSMTH -должна только рендерить, без лишних проверок

    UPD 2 пагинацию увидел, с ней все ок.
    Ответ написан
  • Какой тест не пройдет мое решение задачи?

    miraage
    @miraage
    Старый прогер
    Не уверен, что для Ваших целей подходит, но как идея сойдёт: https://codesandbox.io/s/eager-frost-5rm7o

    function promisify(obj) {
      const cache = {}
    
      return new Proxy(obj, {
        get(target, prop) {
          const value = target[prop]
          const type = Object.prototype.toString.call(value)
    
          if (type === '[object Object]') {
            if (!cache[prop]) {
              cache[prop] = promisify(value)
            }
    
            return cache[prop]
          } else if (type === '[object Function]') {
            if (!cache[prop]) {
              cache[prop] = function (...args) {
                return new Promise((resolve, reject) => {
                  const callback = (err, result) => {
                    if (err) {
                      reject(err)
                    } else {
                      resolve(result)
                    }
                  }
    
                  value.call(this, callback, ...args)
                })
              }
            }
    
            return cache[prop]
          }
    
          return value
        },
      })
    }
    Ответ написан
    2 комментария
  • Как расфишровать фигуру base 64?

    SagePtr
    @SagePtr
    Еда - это святое
    На стороне клиента или сервера? Если на стороне клиента - то создать canvas по размеру картинки, отрисовать туда картинку и начать перебирать пиксели с левого верхнего края, пока не попадётся не белый пиксель. То же самое сделать с обратного конца для поиска нижнего правого края.
    Если на стороне сервера при помощи nodejs, то то же самое, но не при помощи canvas, а к примеру этим: https://www.npmjs.com/package/pngjs
    Ответ написан
    1 комментарий
  • Как решить задачку (шахматная доска, ход конем) без использования js?

    profesor08
    @profesor08 Куратор тега CSS
    Вот ты с выделением ячейки справился. Молодец. Теперь задай для выделенной ячейки 8 теней синего цвета и позиционируй как надо.

    input[type="radio"]:checked + label {
        background: #FF0000;
        box-shadow: 60px 30px 0 0 blue, 60px -30px 0 0 blue;
        position: relative;
        z-index: 1;
    }


    Можешь даже анимацию задать для тени
    label {
        transition: ease box-shadow .3s;
    }
    Ответ написан
    5 комментариев
  • Не понимаю условия условия задачи. Что необходимо сделать?

    @dimoff66
    Кратко о себе: Я есть
    module.exports = function (start, end, fetchFlights) {
        let fetchPromise, route
        
        const routes = [[start]]
        const last = arr => arr[arr.length - 1]
    
        // функция обработки ответа
        const responseExecution = response => {
          let result
          // Если респонс включает конечную точку, 
          // то составляем маршрут из последних элементов routes
          if (response.includes(end)) {
            route = [...routes.map(list => last(list)), end]
          } else if (response.length) {
            // если респонс содержит города, добавляем его в конец списка
            routes.push(response)
          } else { // если массив пустой
            // если это был последний город на текущем уровне графа
            // удаляем весь уровень и т.д. в цикле
            while (routes.length && last(routes).length === 1) {
              routes.pop()
            }
            // если массив routes опустел, значит вариантов нет
            if (!routes.length) {
              route = 'no way'
            } else { // удаляем последний город последнего уровня
              last(routes).pop()
            }
          }
    
          // если маршрут еще не определен, добавляем then и запрашиваем
          // полеты для последнего города последнего уровня
          if (!route) {
            fetchPromise = fetchPromise.then(responseExecution)
            return fetchFlights(last(last(routes)))
          }
        }
    
        // стартуем промис получения полетов
        fetchPromise = fetchFlights(start).then(responseExecution)
    
        // Возвращаем промис, в котором запускаем интервал и резолвим,
        // когда route не пустой
        return new Promise((resolve, reject) => {
          const id = setInterval(() => {
            if (route) {
              clearInterval(id)
              resolve(route)
            }
          }, 1000)
        })
      }


    fetchFlights для проверки

    const fetchFlights = city => {
        const flights = [
          ['A', 'B'],
          ['A', 'C'],
          ['A', 'D'],
          ['D', 'K'],
          ['D', 'L'],
          ['D', 'M'],
          ['M', 'Q'],
          ['M', 'Z'],
          ['L', 'G'],
          ['L', 'F'],
          ['F', 'Y']
        ]
    
        return Promise.resolve(flights.filter(item => item[0] === city).map(item => item[1]))
      }
    Ответ написан
  • На сколько точное попадание по образцу?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Похоже, но можно сделать проще и более универсально. Загвоздка вопроса явно именно в этом, ибо похожий радиус скругления можно добиться методом тыка по сути.

    Этот вариант можно увеличивать бесконечно, меняя значение лишь одной переменной. Всё на процентах и em:



    Его так же можно вставлять в текст, делая значение переменной в em, и он будет подстраиваться под размеры текста:



    P. S. Я не стал вникать, какой вариант логотипа самый актуальный, поэтому взял первый из Интернета. Помимо этого, в вашем варианте есть ненужный код, который можно сократить (нет объединения одинаковых правил, border-top-left-radius и т. п.). Для более точного соответствия не бойтесь делать элементы больше родителя, чтобы получить нужный радиус скругления, для этого есть oveflow: hidden, чтобы лишнее обрезать.
    Ответ написан
    2 комментария
  • Как отобразить Яндекс карту в компоненте vue?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    Проблема из-за css. Для всех canvas'ов у вас задано правило width: 100% !important;, а родительский элемент canvas'а карты имеет нулевые размеры.

    UPD.

    new ymaps.Map("map", {

    Вот так делать не надо. Что если экземпляров компонента с картой будет больше одного? - двух, трёх и т.д. карт с одним id быть не может. Замените id на ref, и передавайте в конструктор карты вместо id сам элемент.
    Ответ написан
    3 комментария
  • Как поставить условие перед inner join?

    dimastik1986
    @dimastik1986
    учусь
    is not null
    или
    is null
    или
    if
    или
    case
    или
    coalesce
    Ответ написан
    Комментировать
  • Как поставить условие перед inner join?

    NeiroNx
    @NeiroNx
    Программист
    Нужно почитать наконец документацию по JOIN и перестать выдумывать синтаксис SQL.
    По сути нужен LEFT JOIN - в нем если значение не найдено то все поля этой таблицы устанавливаются в null
    Ответ написан
    Комментировать
  • Как подменить элементы в массиве элементами из другого массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Object.values([ ...arr1, ...arr2 ].reduce((acc, n) => {
      acc[n.code] = n.id ? n : (acc[n.code] || n);
      return acc;
    }, {}))
    Ответ написан
    Комментировать
  • Как обновить computed property в VUE при изменении элемента массива Array?

    @floydback
    Вычисляемые свойства всегда кешируют значение и обновляют кеш, только когда поменялись реактивные данные. Массив он не обновляет, если только не изменилась его длинна. Так что изменение элемента массива не будет триггерить обновление вычисляемого свойства. Можно использовать watcher с опцией deep: true
    Ответ написан
    Комментировать