Ключ доступа в javascript javascript динамически

#javascript #reactjs #react-native #react-hooks

#javascript #reactjs #react-native #реагирующие хуки

Вопрос:

У меня есть вложенный объект, и из этого объекта визуализации я хочу получить доступ к данным в соответствии с щелчком пользователя. Пример: в приведенный ниже объект я загрузил первый вопрос с помощью response.pathway.вопрос и ответ с помощью response.pathway.answers теперь, если пользователь нажмет «Да», тогда следующим следующим ключом должен быть response.pathway.answers.Да, и если пользователь нажимает на Нет, то следующей клавишей должен быть response.pathway.answers.Нет, короче говоря, какой бы ответ пользователь ни выбрал, он должен быть добавлен в конце концов.

Теперь проблема в том, что я использую flatlist, чтобы показывать ответы, которые возвращают элемент, и когда я добавляю этот элемент в последний из object key, он выдает ошибку. И я знаю, что он выдает ошибку, потому что в объекте, подобном response.pathway.answers.item, нет ключа.Итак, мой вопрос в том, как я могу сделать этот элемент динамичным, например, если пользователь выберет «да», то он должен быть похож на response.pathway.answers.Да, и наоборот. (Обратите внимание, что внутри ключа ответов может быть что угодно, а не только «да нет»).

 {
"pathway": {
    "question ": "this is first question",
    "answers": {
        "Yes": {
            "question": "this question i want to access if user click on yes"
        },
        "No": {
            "question": "this question i want to access if user click on no"
        }
    }
}
  

}

Комментарии:

1. получите ответ в переменной и сделайте вот так response["pathway"]["answer"]["Yes"] , вы можете сохранить имя ключа в переменной и получить желаемый результат.

2. предположим, что пользователь выбрал yes, затем сохраните `var selectedOption = «yes»; var res = response.pathway.answer[Выбранный вариант]; Для получения дополнительной информации см. w3schools.com/js/js_objects.asp

Ответ №1:

 
const key = 'anything you want'
const value = 'anything you want'
.....

{
  "pathway": {
    "question ": "this is first question",
    "answers": {
         // key is dynamically
        [key]: value
    }
  }
}

  

вы также можете сделать подобное obj.pathway.annswers[key] = 'value'

Ответ №2:

Я не уверен, что понял вопрос, но вы, возможно, захотите попробовать следующее: поскольку вы хотите получить доступ к любому ключу внутри pathway.answer объекта, то для доступа к его элементам вы можете использовать индексацию, а не точечную нотацию.

Это означает, что вы также можете получить доступ pathway.answer.Yes этим способом pathway.answer['Yes'] .

Теперь вам нужно только получить полезную нагрузку того, на что пользователь нажал, чтобы получить к нему доступ (например).

 for (let buttonElem of document.querySelectorAll('.answer-button')) {
buttonElem.addEventListener('click', () => alert(buttonElem.innerHTML));
}
  

 const data = {
  pathway: {
    question: 'whatever',
    answers: {
      yes: 'something',
      no: 'something else',
      litteralyAnythingElse: 'find something idk'
    }
  }
};

const answerDiv = document.getElementById("answer");

for (let buttonElem of document.querySelectorAll('.answer-button')) {
  buttonElem.addEventListener('click', () => {
    answerDiv.innerHTML = data.pathway.answers[buttonElem.innerHTML];
  });
}  
 <button class="answer-button">yes</button>
<button class="answer-button">no</button>
<button class="answer-button">litteralyAnythingElse</button>

<div id="answer">
</div>