@Avenant
Frontend-разработчик

Как реорганизовать эти условия?

В этом коде слишком много if-оф, как их можно убрать или сделать по читабельнее?
const button = document.querySelector('.test')
const updateProp = () => {
	const confirmResult = confirm(
		'Вы действительно хотите изменить значение ключа у объекта или получить данный объект в консоль?'
	)
	const promptResult1 = confirmResult ? prompt('Введите желаемый ключ') : ''
	if (promptResult1.includes('_')) {
		console.log(proxy[promptResult1])
	} else {
		const promptResult2 = confirmResult
			? prompt('Введите желаемое значение')
			: ''
		if (promptResult1 != '' && promptResult2 != '') {
			proxy[promptResult1] = promptResult2
			console.log(proxy[promptResult1])
		} else {
			console.log('Вы отменили данное действие')
		}
	}
}
button.addEventListener('click', updateProp)

const person = {
	name: 'Maxim',
	job: 'Junior Fronted-Developer',
	age: 15
}
const handler = {
	get(target, prop) {
		if (prop in target || prop.includes('_')) {
			let arr = prop.split('_')
			arr = arr.map(
				(el, i, t) => (el = `${el}: ${target[el]}${t[i + 1] ? ',' : ''}`)
			)
			return arr.join(' ')
		}
		return 'Такого ключа не существует'
	},
	set(target, key, prop) {
		if (key in target) {
			if (prop != null) {
				const confirmResult = confirm(
					`Подтвердить изменение данного ключа (${key}) на значение ${prop}?`
				)
				if (key === 'age') {
					if (prop > 0 && prop <= 100) {
						if (confirmResult) {
							target[key] = prop
						} else {
							console.log('Действие отменено')
						}
					} else {
						console.log(`Слишком ${prop < 0 ? 'маленький' : 'высокий'} возраст`)
					}
				} else if (key != 'age') {
					if (confirmResult) {
						target[key] = prop
					} else {
						console.log('Действие отменено')
					}
				}
			} else {
				console.log('Значение не указано')
			}
		} else {
			console.log('Не верная запись')
		}
	}
}

const proxy = new Proxy(person, handler)
  • Вопрос задан
  • 36 просмотров
Решения вопроса 1
WblCHA
@WblCHA
const button = document.querySelector('.test')
  const updateProp = () => {
    const confirmResult = confirm(
      'Вы действительно хотите изменить значение ключа у объекта или получить данный объект в консоль?'
    );
    if (!confirmResult) {
      console.log('Вы отменили данное действие');
      return;
    }

    const promptResult1 = prompt('Введите желаемый ключ');
    if (!promptResult1.includes('_')) {
      const promptResult2 = prompt('Введите желаемое значение');
      proxy[promptResult1] = promptResult2
    }

    console.log(proxy[promptResult1])
  }
  button.addEventListener('click', updateProp)

  const person = {
    name: 'Maxim',
    job: 'Junior Fronted-Developer',
    age: 15
  }
  const handler = {
    get(target, props) {
      let arr = props.split('_').map((el) => (`${el}: ${target[el] ?? 'Такого ключа не существует'}`));
      return arr.join(', ');
    },
    set(target, key, prop) {
      if (!target[key]) {
        console.log('Не верная запись');
        return;
      }
      if (prop === null) {
        console.log('Значение не указано');
        return;
      }

      const confirmResult = confirm(
        `Подтвердить изменение данного ключа (${key}) на значение ${prop}?`
      )
      if (!confirmResult) {
        console.log('Действие отменено');
        return;
      }

      switch (key) {
        case 'age':
          if (prop <= 0 || prop > 100) {
            console.log(`Слишком ${prop > 100 ? 'высокий' : 'маленький'} возраст`);
            return;
          }
          target[key] = prop;
          return;

        default:
          target[key] = prop;
      }
    }
  }

  const proxy = new Proxy(person, handler);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы