M
M
Maxim Boyko2021-07-15 15:16:22
JavaScript
Maxim Boyko, 2021-07-15 15:16:22

How to reorganize these conditions?

There are too many if-ofs in this code, how can they be removed or made more readable?

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)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
W
WbICHA, 2021-07-15
@Avenant

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);

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question