Javascript 在通过JSON对象循环后动态分配变量
可能是一个初学者的问题,但我有一个数组json对象,我正在循环使用它来提取某些值。如果这些值等于“NO”,那么我想使用jquery隐藏一个div。这应该足够简单,但我不知道数组可以包含多少项,因此我必须确保动态获取所有数字/值对 我的JSON类似于以下内容:Javascript 在通过JSON对象循环后动态分配变量,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,可能是一个初学者的问题,但我有一个数组json对象,我正在循环使用它来提取某些值。如果这些值等于“NO”,那么我想使用jquery隐藏一个div。这应该足够简单,但我不知道数组可以包含多少项,因此我必须确保动态获取所有数字/值对 我的JSON类似于以下内容: "account" : [{ "ID":1, "transferAllowed": "NO" },{ "ID":2, "transferAllowed": "YES" }] 我的循环: //define v
"account" : [{
"ID":1,
"transferAllowed": "NO"
},{
"ID":2,
"transferAllowed": "YES"
}]
我的循环:
//define variable that references the values I need from the json object
var account = this.json.account;
for ( var i = 0; i < account.length; i++ ) {
//compare all values of transferAllowed however many that may be. If they all equal No, then hide div with jquery $("#div").hide()
}
//定义引用json对象所需值的变量
var account=this.json.account;
对于(变量i=0;i
感谢您的帮助。谢谢。试试这个:)
var account=this.json.account;
变量隐藏计数=0;
对于(变量i=0;i
试着翻转问题,比如为科学实验定义一个“无效假设”:为了反驳所有项目都说“不”,你只需要找到一个不说“不”的值
这意味着您只需在循环中进行简单的检查即可找到答案:
var account = this.json.account;
// Start with the hypothesis that everything will say "NO"
var allDisallowed = true;
for ( var i = 0; i < account.length; i++ ) {
if ( account[i].transferAllowed != "NO" ) {
// Hypothesis disproved!
allDisallowed = false;
}
}
if ( allDisallowed ) {
$("#div").hide();
}
或者,如果将循环包装到函数中,则可以保存定义一些变量:
function areAllDisallowed( account ) {
for ( var i = 0; i < account.length; i++ ) {
if ( account[i].transferAllowed != "NO" ) {
// At least one element is not a "NO", so result is false
return false;
}
}
// We will only reach this line if we never return false
// Therefore, we know that all elements say "NO"
return true;
}
if ( areAllDisallowed(this.json.account) ) {
$("#div").hide();
}
功能区域不允许(帐户){
对于(变量i=0;i
(正如在一篇评论中指出的那样,
var i
在for
循环中的位置可能会在以后引起混淆,但我保留原样只是为了做出回答您特定问题的更改。)作为对该代码的附带评论,像这样在for
语句中声明var i
可能不是一个好习惯。与某些语言不同,循环没有自己的变量范围,因此var i
仍在为整个函数声明一个变量,包括声明上方的行(一种称为“提升”的混乱效果)。感谢您的解释!我甚至没有考虑过翻转这个问题。你发现第二个解决方案,除了一个“非”以外的值之外,对我来说是最有意义的。到目前为止,它似乎在我的应用程序中起作用。再次感谢!谢谢我来试一试。
for ( var i = 0; i < account.length; i++ ) {
if ( account[i].transferAllowed != "NO" ) {
// Hypothesis disproved!
allDisallowed = false;
// No need to finish the loop
break;
}
}
function areAllDisallowed( account ) {
for ( var i = 0; i < account.length; i++ ) {
if ( account[i].transferAllowed != "NO" ) {
// At least one element is not a "NO", so result is false
return false;
}
}
// We will only reach this line if we never return false
// Therefore, we know that all elements say "NO"
return true;
}
if ( areAllDisallowed(this.json.account) ) {
$("#div").hide();
}