Как использовать метод arrey.find js

407
27 октября 2017, 14:58
function Microwave() {
  this.dishes = [{ nameOfDish: 'potato', time: 30 }, { nameOfDish: 'pizza', time: 45 }]
}
Microwave.prototype.cookDish = function (nameOfDish) {

this.disches.find(function(currentValue, index, arr){
})
};
const microwave = new Microwave( );
microwave.cookDish('potato')

исходя из значения time будет запускать таймер и по истечении оного - выводить алерт. Как это можно реализовать?

Answer 1

function Microwave() { 
  this.dishes = [{ 
    nameOfDish: 'potato', 
    time: 30 
  }, { 
    nameOfDish: 'pizza', 
    time: 45 
  }] 
} 
 
Microwave.prototype.cookDish = function(nameOfDish) { 
  this.dishes.find(function(currentValue, index, arr) { 
    if(currentValue.nameOfDish === nameOfDish){ 
      myAlert(currentValue); 
      return true; 
    } 
  }); 
}; 
 
function myAlert(obj){ 
  setTimeout(_ => console.info(`Name: ${obj.nameOfDish}; Time: ${obj.time}`), obj.time); 
} 
const microwave = new Microwave(); 
microwave.cookDish('potato')

Answer 2

Метод .find возвращает элемент массива, для которого переданная функция-callback вернет true.

Для поиска элемента по свойству nameOfDish можно использовать следующую функцию:

(dish) => dish.nameOfDish == nameOfDish;

Далее взять у найденного объекта свойство time, и использовать его в качестве второго параметра для функции setTimeout, который задает время задержки в миллисекундах.

вызов setTimeout для найденного элемента может выглядеть так

setTimeout(alert, dish.time, dish.nameOfDish);

Если подразумевалось, что значение свойства time - это секунду, то перед передачей в качестве параметра стоит привести их к миллисекундам, для этого умножив на 1000.

Все в сборе может выглядеть так:

function Microwave() { 
  this.dishes = [{ 
    nameOfDish: 'potato', 
    time: 1000 
  }, { 
    nameOfDish: 'pizza', 
    time: 45 
  }] 
} 
 
Microwave.prototype.cookDish = function(nameOfDish) { 
  var dish = this.dishes.find(dish => dish.nameOfDish == nameOfDish); 
  setTimeout(alert, dish.time, dish.nameOfDish); 
}; 
const microwave = new Microwave(); 
microwave.cookDish('potato')

READ ALSO
Как сгруппировать `div` по 4 штуки?

Как сгруппировать `div` по 4 штуки?

Изначально есть такая структура:

443
Экземпляры Vue.js?

Экземпляры Vue.js?

Сколько экземпляров можно создать?

333
sequelize, большое количество моделей-таблиц

sequelize, большое количество моделей-таблиц

Есть mysql база данных, в которой есть огромное (несколько десятков миллионов) таблиц, которые содержат исторически накапливаемые данныеТаблицы...

333
Способы обновления данных на сайте

Способы обновления данных на сайте

Средства разработчика google chrome позволяют отследить ajax запросы (XMLHttpRequest)Но мне вот сейчас попался сайт, который не отправляет эти запросы,...

343