Можно ли как-то объединить эти две строки в одну, используя синтаксис ES6? - PullRequest
0 голосов
/ 01 декабря 2018

В моем массиве объектов с именем weekTimes я ищу объект, свойство date которого равно this.mon.Если объект найден, я хочу, чтобы его значение свойства hours заполняло элемент DOM input, называемый this.monTime.

. Затем мне нужно делать одно и то же для каждого дня недели.,Я чувствую, что должен быть более элегантный способ сократить все это, чем то, что я имею до сих пор (см. Ниже), но я не могу найти один.Любое предложение будет приветствоваться.

var temp;
temp = weekTimes.find(x => x.date === this.mon);
this.monTime = temp.hours;

temp = weekTimes.find(x => x.date === this.tue);
this.tueTime = temp.hours;

...

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Вы также можете рассмотреть более функциональный подход и избегать полагаться на внешнюю область для выполнения вашего обновления: (я предполагаю, что на вашем примере это так)

Вот функция, которая ищет дату для поискав списке объектов времени.Если объект найден, он выполняет заданный обратный вызов:

/**
 * Finds in given list of times, a time which date property is set to given date.
 * When a time is found, pass it as an argument to given callback.
 * When no time is found, callback is not executed
 * @param date {string}
 * @param times {time[]}
 * @param cb {function}
 */
const whenCurrentDay = (date, times, cb) => {
  const found = times.find(time => time.date === date);
  found && cb(found);
};

Затем вы бы использовали его следующим образом:

whenCurrentDay('mon', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('tue', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('wed', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('thu', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('fri', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('sat', weekTimes, time => console.log(`do something with ${time.hours}`));
whenCurrentDay('sun', weekTimes, time => console.log(`do something with ${time.hours}`));

Я бы признал, что это немного более многословно.

0 голосов
/ 02 декабря 2018

Я предлагаю ниже функциональный подход

    for(day in ['mon','tue','wed','thu','fri','sat','sun']){
      this[day + 'Time'] = weekTimes.find(x => x.date === this[day])
                                    .map(x => x.hours);
}
0 голосов
/ 01 декабря 2018

Вы можете сделать это с массивом имен свойств (дней):

["mon", "tue", "wed", "thu", "fri"].forEach(day => {
    const temp = weekTimes.find(x => x.date === this[day]);
    if (temp) this[day + "Time"] = temp.hours;
});

Или вы можете перевернуть таблицы и просто выполнить итерацию weekTimes один раз:

weekTimes.forEach(x => {
    if (["mon","tue","wed","thu","fri"].includes(x.date)) {
        this[x.date + "Time"] = x.hours;
    }
});

Если вы уверены, что x.date всегда будет интересным днем, тогда вы даже можете пропустить этот includes тест:

weekTimes.forEach(x => this[x.date + "Time"] = x.hours);

Элемент ввода?

Вы пишете на своемвопрос, что this.monTime относится к элементу ввода.Но чтобы установить значение элемента ввода, вам нужно установить его свойство value.Является ли monTime установочной функцией, которая делает именно это?Если нет, то вы, вероятно, должны сделать this.monTime.value = .... с дополнительными .value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...