Как правильно в данном случае поступить с функцией, как при вызове функции пропускать параметры

198
01 октября 2021, 07:40

Есть задача. Написать функцию, которая принимает время (часы, минуты, секунды) и выводит его на экран в формате «чч:мм:сс». Если при вызове функции минуты и/или секунды не были переданы, то выводить их как 00. Я сделал(но не правильно) её так Но когда я хочу вызвать функцию пропустив параметр в данном случае b, то получается такой синтаксис что между двумя другими параметрами стоят две запятые. Как в данном случае правильно вызвать функцию что бы можно было указать часы(a) и секунды(c) не указывая минуты(b)

function timeStr(a,b,c){
    if ( c == undefined) {
        let str = `${a}:${b}:00`;
        return str;
    }
    else if ( b == undefined) {
        let str = `${a}:00:${0}`;
        return str;
    }
    else {
let arr = [a, b, c];
let str = arr.join(':');
return str;
} 
}
alert(timeStr(24,,23));
Answer 1

function setTime(h) { 
  return function setMinutes(m = 0) { 
    return function setSeconds(s = 0) { 
      return `${h}:${m}:${s}` 
    } 
  } 
} 
 
var time = setTime(22)()(16); 
console.log(time);

со стрелочными функциями может выглядит чуть чуть опрятнее:

const setTime = h => { 
  return (m = 0) => { 
    return (s = 0) => { 
      return `${h}:${m}:${s}` 
    } 
  } 
} 
 
var time = setTime(22)()(); 
console.log(time);

Answer 2

А если передать время в функцию как строку, а потом разбить ее на массив по запятым, проверить каждый элемент и если он пустой, то меняем его на '00', и потом обратно массив загоняем в строку.

function timeStr(t){ 
  t=t.split(',').map(i=>!i?'00':i); 
  return t.join(':'); 
} 
alert(timeStr('24,,23'));

Answer 3

А пусть будет один объект в качестве аргумента... вместо 3-х чисел)

let time = {h: 5, s: 7}; 
 
console.log( timeStr( time ) ); 
 
function timeStr(obj){ 
  return [ 
    ( addZero( obj.h ) || "00" ), 
    ( addZero( obj.m ) || "00" ), 
    ( addZero( obj.s ) || "00" ), 
  ].join(":"); 
} 
 
function addZero(n){ 
  if( !isNaN(n) ){ 
    return n > 9 ? n : "0" + n; 
  } 
}

Сразу создается массив. Каждый его элемент взят в скобки, чтобы в итоге туда попал правильный результат вычислений: Попытка достать число из объекта по соответствующему ключу. Если его там нет и вернулось undefined ( уже в результате функции addZero )- для такого случая предусмотрено ИЛИ || "00".

READ ALSO
JS. Как обращаться к вложенным функциям?

JS. Как обращаться к вложенным функциям?

Как обратиться к вложенной функции и вложенной в нее функции?

180
Округление числа до следующего целого числа десятков

Округление числа до следующего целого числа десятков

Возможно ли в JavaScript округлять числа по следующей схеме:

131
Не могу подключить валидацию форм

Не могу подключить валидацию форм

Появляется много ошибок и при нажатии на кнопку добавляется +1 ошибка

65
вычитание первого взноса при условии его минимальной ставки в %

вычитание первого взноса при условии его минимальной ставки в %

Совсем запутался с процентами в наличии имеем wordpress и плагин cost calculator (внутри него условия по сути на JS ) делаю калькуляторы ипотеки с разными...

88