@mishapsv

Как сделать switch case с двумя параметрами?

Есть функция, которая работает, но неплохо было бы переписать её через свитч кейс.
Но не могу сообразить как быть с проверкой сразу двух параметров? И в примерах ничего не нашел.
Подскажите, плз, как написать хотя бы блок с проверкой на то, что первый аргумент массив, а второй - нет.

function  getMessage(a, b) {
	if(typeof a === "boolean") {
		if(a) {
			return "Переданное GIF-изображение анимировано и содержит " + b + " кадров";
		} else {
			return "Переданное GIF-изображение не анимировано";
		}
	}
	if(typeof a === "number") {
		return "Переданное SVG-изображение содержит " + a + " объектов и " + a*4 + " аттрибутов";
	}
	if(Array.isArray(a) && !Array.isArray(b)) {
		var sum = 0;
		for (var i=0; i < a.length; i++) {
			sum += a[i];
		}
		return "Количество красных точек во всех строчках изображения: "+sum;
	}
	if(Array.isArray(a) && Array.isArray(b)) {
		var square = 0;
    if (a.length <= b.length) {
        for (var i=0; i < a.length; i++) {
			square += a[i]*b[i];
		}
		return "Общая площадь артефактов сжатия: " + square + " пикселей";
    } else {
      for (var i=0; i < b.length; i++) {
			square += a[i]*b[i];
		}
		return "Общая площадь артефактов сжатия: " + square + " пикселей";
    }
	}
}

console.log(getMessage([1,3,4,5,6,7], [1,4,4,5,6]))
  • Вопрос задан
  • 2543 просмотра
Решения вопроса 1
Можно попробовать что-то в этом роде
function getMessage(a, b) {
  if(typeof a === "boolean") {
    return a ? "Переданное GIF-изображение анимировано и содержит " + b + " кадров" : 
      "Переданное GIF-изображение не анимировано";
  }
  if(typeof a === "number") {
    return "Переданное SVG-изображение содержит " + a + " объектов и " + a*4 + " аттрибутов";
  }
  switch('' + +Array.isArray(a) + +Array.isArray(b)) {
    case '10':
      return "Количество красных точек во всех строчках изображения: " + 
        a.reduce(function(sum, x) { return sum + x; }, 0);
    case '11':
        return 'Общая площадь артефактов сжатия: ' + 
          (a.length <= b.length ? a.reduce(function(sum, x, i) { return sum + x*b[i]; }, 0) :
          b.reduce(function(sum, x, i) { return sum + x*a[i]; }, 0)) + ' пикселей';
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aleksand44
@aleksand44
switch насколько понимаю больше подходит для вариантов когда под одно условие возможно множество вариантов, а не когда условий много.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы