Javascript 根据数组检查值并返回另一个值
我正在构建一个点击类型的游戏,我需要通过将其与数组进行比较来查看用户选择的答案是否正确 这是JSONJavascript 根据数组检查值并返回另一个值,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在构建一个点击类型的游戏,我需要通过将其与数组进行比较来查看用户选择的答案是否正确 这是JSON { quiztitle: "Select the States", correct_answers: "9", states: [ { state_name: "Alabama", image: "alabama_image", answer: "correct" },
{
quiztitle: "Select the States",
correct_answers: "9",
states: [
{
state_name: "Alabama",
image: "alabama_image",
answer: "correct"
},
{
state_name: "Alberta",
image: "alberta_image",
answer: "incorrect"
},
ect...
当用户单击一个按钮时,它获取该值并需要检查它是否正确。最好的方法是什么
这是我迄今为止的尝试:
$('body').on('click', '.matchBtns', function(){
var value = $(this.innerHTML);
if($.inArray(value, data.states)){
//its in the array
}else{
//its not
}
});
我不确定如何访问值“answer”以检查是否正确
这是html按钮
<button class="matchBtns">*State Name Here*</button>
*此处注明姓名*
如果您喜欢下划线
您可以尝试:
$('body').on('click', '.matchBtns', function(){
var value = $(this.innerHTML);
if(_.contains(_.pluck(data.states, "answer"), value)) {
//is in the array
}
else{
//is not
}
});
.pluck(array,“x”)
是..map(array,function(x){return x.x;)的缩写
,这样您就不会试图比较字符串和对象了您已经掌握了一些方法,但仍有很多工作要做。首先,您不希望按钮中包含文本的jQuery对象;您只需要文本。因此,您可以执行以下操作:
var value = $(this).text();
if ( state.state_name == value && state.correct )
其次。$.inArray
不起作用有两个原因。一是它是一个多维对象数组。二是你不只是想检查它是否在数组中;你想检查它是否在数组中并且具有正确的属性
因此,您可以迭代数组,看看是否有任何答案是正确的:
$('body').on('click', '.matchBtns', function() {
var value = $(this).text();
var correct = false;
$.each(data.states, function(i, state) {
if ( state.state_name == value && state.answer == 'correct' ) {
correct = true;
return false; // break out of $.each()
}
});
if ( correct ) {
// true
}
else {
// false
}
});
下面是一个正在工作的JSFIDLE:
您可以通过将answer
(或correct
)存储为布尔值而不是字符串来简化此操作。这样,您可以执行以下操作:
var value = $(this).text();
if ( state.state_name == value && state.correct )
你得把答案循环一遍
$('body').on('click', '.matchBtns', function(){
...
var value = this.innerHTML;
for (var i = 0,l = data.states.length; i< l; i++){
if (data.states[i].state_name === value && data.states[i].answer === 'correct'){
/// is correct
break; // to stop the loop
}else {
// not correct, continue
}
}
...
}
$('body')。在('click','matchBtns',function()上{
...
var value=this.innerHTML;
对于(var i=0,l=data.states.length;i
当前返回的所有答案都是错误的atm@christianvarga@Dale我不小心检查了状态。请更正而不是状态。答案。我已经解决了这个问题(检查我编辑的答案).在抄袭别人的答案之前,一定要仔细阅读他们的答案,看看你是否能发现这样的问题-这很容易发现,而且你不想养成一种盲目抄袭答案的习惯,希望答案能奏效。很多时候,你需要修改答案以适应你的需要。我在读《我保证》!刚刚在jquery工作&太累了。我感谢你的帮助,这个代码现在起作用了。@Dale哈哈,对不起,伙计,我在那里可能有点粗鲁。我很容易说,当我这么久都在做的时候,很容易发现它:p。不管怎样,很高兴它对你起作用了!