• Как изменить цвет заливки круга на другое (случайное) значения?

    Зачем по сути статический метод запихивать в класс?
    У тебя, результат метода никак не зависит от его контекста, максимум что может понадобиться, это передать внутрь предыдущий цвет, если ты хочешь чтобы они не повторялись или как-то зависели друг от друга. Запихивая статический метод в класс ты заставляешь приложение тратить дополнительные CPU тики и память на создание этого метода в каждом экземпляре твоего класса.
    Ответ написан
    Комментировать
  • Почему не отображается дочерний компонент?

    0xD34F
    @0xD34F
    Нет у вас в компоненте recepies одноимённого массива, он находится в recipie-list. Очевидно, этот массив надо перенести в recepies (тогда его можно будет обойти с помощью ngfor для создания экземпляров recipies-detail), а в recipie-list передавать его как параметр.
    Ответ написан
    Комментировать
  • Как выделить слово с цветом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вместо клавишных событий можно слушать событие input – когда значение меняется.

    Две строки – образец и введённый текст – бить на слова по пробелам. Если последний введённый символ не пробел, то последнее введенное слово проверять пока рано. Несовпавшее слово заменяется на обёрнутое в тег.

    примерно так
    const dGet = document.getElementById.bind(document);
    const reSpace = /\s+/;
    const div = dGet('text');
    const text = div.innerText;
    const words = text.trim().split(reSpace);
    dGet('text_input').addEventListener('input', function(e){
      var i, myWords = e.target.value.trim().split(reSpace),
      theWords = words.slice();
      var toCheck = e.target.value.substr(-1) === ' ';
      if(!toCheck) myWords.length--;
      for(i=0; i<Math.min(myWords.length, words.length); i++) {
        if(words[i] !== myWords[i]) {
          theWords[i] = '<i>' + words[i] + '</i>';
        } else {
          theWords[i] = '<b>' + words[i] + '</b>';
        }
      }
      div.innerHTML = theWords.join(' ');
    });
    Fiddle
    Ответ написан
    Комментировать
  • Как убрать первый пробел в инпуте, когда условие сработало?

    BRAGA96
    @BRAGA96
    var input = document.getElementById('in');
    input.addEventListener('keydown', function(event) {
    	if (event.keyCode === 32) {
    		this.value = this.value.trim();
    	}
    }, false);
    
    if (!String.prototype.trim) String.prototype.trim = function() {
    	return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
    };
    Ответ написан
    Комментировать
  • Почему не работает ngModel?

    0xD34F
    @0xD34F
    А не многовато ли у вашего ngModel скобок?
    Ответ написан
    Комментировать
  • Как реализовать метод для удаления узла по значению или по индексу из связанного списка?

    miraage
    @miraage
    Старый прогер
    YourListClass.prototype.remove = function (value) {
      switch (typeof value) {
        case 'string':
          const index = this.indexOf(value);
          this.removeAt(index);
          break;
    
        case 'number':
          this.removeAt(value);
          break;
      }
    };
    Ответ написан
    Комментировать
  • Как перебрать связной список, через for of?

    0xD34F
    @0xD34F Куратор тега JavaScript
    [Symbol.iterator]() {
      let curr = this.head;
    
      return {
        next() {
          if (curr) {
            const item = curr;
            curr = curr.next;
            return {
              done: false,
              value: item,
            };
          } else {
            return {
              done: true,
            };
          }
        },
      };
    },
    Ответ написан
    Комментировать
  • Почему не работают режимы production и developmeent?

    rockon404
    @rockon404
    Frontend Developer
    Прямым текстом написано, что ключ devtool должен быть string или false. У вас же в production режиме по условию null
    Учитесь читать текст ошибок.
    Учитесь гуглить ошибки, если из их текста не совсем понятно, как их устранить.
    Если не знаете английский язык - учите.
    Ответ написан
    Комментировать
  • Почему не корректно работает модуль?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    В функции battle
    this перед team забыли.
    Ответ написан
    Комментировать
  • Как парсить строку в оператор сравнения?

    @Ridz
    kikosko
    const filters = {
                byName: optionName == undefined ? () => undefined : (actualName, optionName) => actualName === optionName,
    
                byCount: optionCount == undefined ? () => undefined : new Function("actualName, optionName", "return actualName " +optionCount),
    
                byPrice: optionPrice == undefined ? () => undefined : new Function("actualName, optionName", "return actualName " +optionPrice)
           };
    Ответ написан
    Комментировать
  • Как парсить строку в оператор сравнения?

    @cppjunkie
    А как насчет такого:

    function evaluateFilter(filterExpr, param) {
      // Это проверка чтобы всякий нехороший JS-код в eval() не передавался
      if (!/^(>|<|>=|<=|==|!=)\s*[0-9]+$/.test(filterExpr)) {
        throw new Error('Invalid filter expression');
      }
      // param надо перегнать в число чтобы через него тоже не передавали чего попало
      return eval(Number(param) + filterExpr);
    }
    
    console.log(evaluateFilter('>=200', 1000));
    console.log(evaluateFilter('>200', 100));
    console.log(evaluateFilter('==200', 200));
    evaluateFilter('alert("hello world")', 0);


    Обычно eval() не очень рекомендуется использовать, т.к. через него любой код можно выполнять, но если как следует проверять входные данные то почему бы и нет. Хотя проще наверное свой урезанный eval написать для таких сравнений простых.
    Ответ написан
    1 комментарий
  • Как парсить строку в оператор сравнения?

    @Finch_85
    Странная реализация фильтра. Но если обязательное условие ввод трех параметров для фильтра, то вот рабочий вариант - https://codepen.io/anon/pen/JZEWEB?editors=1111

    П.С. И да, я повторю что поиск по имени так работать не будет, ибо нужно вводить точное соответствие названия товара - Product 1 === Product 1
    Кроме того, нужно сделать так чтобы можно было указывать любое количество фильтров. То есть, искать только по цене и названию, или количеству и цене и т.д. А вот как это сделать уже догадайся сам))

    Вот видимо то что надо - https://github.com/klesarev/test-lessons Делал это в свое время в качестве тестовго задания. Посмотри.
    Ответ написан
    2 комментария
  • Почему не работает фильтр по свойствам класса?

    @ned4ded
    Верстка, Фронтенд
    В целом, вы, похоже, просто запутались в в контексте и ссылках:

    name.filter(product => name === undefined || product.name === this.name); 
    // в этом месте вы пытаетесь отфильтровать переданную опцию name, которая является строкой "anything 4",
    // так же контекст this.name - будет undefined, потому что в данном случае вы передаете стрелочную функцию, 
    // this которой будет ссылаться на объект, в котором она была создана, т.е. - на Shop. У Shop нет свойства name
    // правильный вариант: 
    const filtered = this.products.filter(product => {
     return product.name === undefined || product.name === name
    });


    Все последующие функции вам нужно отредактировать по тому же принципу.

    PS.
    Не совсем понимаю, зачем вам парсить строчные операторы сравнения, когда можно просто отправлять функцию сравнения в метод фильтрации.

    class Shop {
        constructor(products) {
            this.products = [];
        }
    
        addProduct(newProduct) {
            this.products.push(newProduct);
        }
    
        filterProduct(fn) {
          return this.products.filter(fn);
        }
        
    }
    const shop = new Shop();
    shop.addProduct(new Product("product 1", 1, 2000));
    shop.addProduct(new Product("item 2", 2, 100));
    shop.addProduct(new Product("some 3", 3, 500));
    shop.addProduct(new Product("anything 4", 4, 1000));
    
    const filtered = shop.filterProduct((product) => product.name === 'anything 4' && product.count > 3 && product.price >= 500);
    
    // console.log(filtered): [ Product { name: 'anything 4', count: 4, price: 1000 } ]


    На самом деле, есть еще много мелких моментов:
    1) С данными лучше работать функционально и не допускать добавления, удаление и проч. операции в текущем объекте, т.е. объект должен быть иммутабельным. При добавлении товара нужно создавать новый объект Shop.

    2) Вытекает из первого - зачем вам в конструкторе Shop сигнатура products, когда вы ее не используете? По сути, ее должно использовать именно для сохранения передаваемого массива продуктов.

    3) В объектах, работающих с данными, особенно когда идет фильтрация, сортировка и проч операции, лучше сразу имплементировать fluent-interface.
    Ответ написан
    Комментировать
  • Как отфильтровать свойства класса?

    mbelskiy
    @mbelskiy
    Software Developer
    dataset это экземпляр класса Object, для него неопределен метод map. Вероятно вам поможет вызывать map для массива ключей объекта.
    Ответ написан
    Комментировать
  • Как отфильтровать свойства класса?

    kgb_zor
    @kgb_zor
    I need your traceback.
    Комментировать
  • Как исправить дефект в логике в моей мини игре?

    mlnkv
    @mlnkv
    JavaScript Developer
    Ответ написан
    Комментировать
  • Как корректно реализовать метод "battle" в моей мини игре?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Во-первых - у вас неправильное условие окончания боя. Ошибка тривиальная, так что тут ничего более не скажу, думайте сами.

    Во-вторых - фантастически козлиная реализация самого метода battle в целом. Почему этот метод должен знать о конкретных экземплярах Unit? Не должен. Что, при изменении состава команд полезете его исправлять? Это абсурд.

    Отсюда, кстати и происходит упомянутый вами "беспрерывный бой" - поскольку вы каждому члену обеих команд назначили в противники кого-то конкретного из другой команды раз и навсегда, то... как вы думаете, какова вероятность, что сразу всем членам одной команды удастся одолеть своих противников? - часто получается так, что в одной из команд жив один её участник, а в другой два - и они никак не взаимодействуют.

    Надо сделать так, чтобы участники команд не были привязаны к конкретному противнику раз и навсегда. Можно добавить в Team метод kick (аналогично таковому в Unit), где будет осуществляться выбор - кто кого атакует (например, участники команды по очереди атакуют случайного участника другой команды). Ну и соответственно, использовать этот метод в battle, типа так.
    Ответ написан
    2 комментария
  • Как сделать проверку по свойству конструктора?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Там массив, нужно пройтись циклически по массиву и для каждого элемента сделать проверку. Можно не циклом, а every
    Team.prototype.isAlive = function () {
       return !this.members.every(function(memb) { // Вернет true, если все элементы == 0. В начале я поставил !, чтобы было false а не true
          return memb.currentHeaalth === 0;
       });
    };
    Ответ написан
    Комментировать