У меня есть объект, который выглядит так: var object = {"keyword": "next", "other word": "wrong", "test": "wrong"}
. Я хочу использовать ввод, который пользователь вводит в текстовое поле, и искать в этом вводе любой из ключей объекта. Если это совпадение, я также хочу, чтобы он проверял, является ли значение этого ключа «следующим». Если это так, я хочу, чтобы он мог запускать функцию. Если ключ совпадает, но значение не является "следующим", я хочу, чтобы он console.log
значение.
Вот код, который я сейчас использую:
var object = {"keyword": "next", "other word": "wrong", "test": "wrong"}
var match;
document.addEventListener('keyup', function(e){
var text = document.getElementById("input").value;
var options = Object.keys(object);
if (e.keyCode == 13){
if(options.some(function(element){
match = element;
return text.toString().indexOf(element) != -1;
})){
if (object[match].toString() == "next"){
console.log("next");
document.getElementById("input").value = "";
} else {
console.log(object[match]);
document.getElementById("input").value = "";
}
} else {
document.getElementById("input").value = "";
console.log("A valid keyword could not be found in your response: please try again!");
}
}
});
<input id='input' autofocus>
<div id="gamearea"></div>
Этот код работает нормально до тех пор, пока я не изменю данные объекта, и в этот момент ввод «другого слова» будет выводить не только «неверно», но также «В вашем ответе не найдено допустимое ключевое слово: попробуйте еще раз!» Если вам это нужно, я могу опубликовать больше кода, но я старался не копировать / вставлять весь свой файл. Приветствуются любые решения или даже просто указатели.
3 ответа
Ниже представлено представление о том, как решить проблему с помощью метода Object.entries
.
const sentence = "This sentence has a keyword";
const object = {"keyword": "next", "other word": "wrong", "test": "wrong"};
const someFunc = () => {
console.log("function!");
}
Object.entries(object).forEach(([key, val]) => {
if (sentence.includes(key)) {
val === "next" ? someFunc() : console.log('here');
}
})
Получив ввод, вы можете проверить, является ли он свойством вашего object
, используя Object.prototype.hasOwnProperty()
. Используя обозначение скобок, вы можете затем получить значение свойства, предоставленного в качестве входных данных, чтобы проверить, равно ли оно "next"
:
var object = {"keyword": "next", "other word": "wrong", "test": "wrong"};
var userInput = "keyword";
if(object.hasOwnProperty(userInput)) { // check that user input is a property . in object
var value = object[userInput]
if(value === "next") { // check that the value of the users input is "next"
// run some function
console.log("Value next, so we can call a function");
} else { // the value is not next, so we can log it
console.log(value);
}
}
Ниже приведен базовый пример, который даст вам представление об использовании Object.keys.
var object = {"keyword": "next", "other word": "wrong", "test": "wrong"};
var yourSearchWord = 'keyword';
// Get the key names
var objectKeys = Object.keys(object);
if(objectKeys.indexOf(yourSearchWord) != -1) {
if(object[yourSearchWord] === 'next') {
console.log('The value is next');
// Call your next function
}
}
indexOf
, вместо этого есть более быстрые подходы к проверке принадлежности ключа к объекту. Кроме того, возможно, вам поможет более подробное объяснение того, как работает ваш код. Не уверен, что это причины, по которым вас отвергли, просто предположение.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.