Javascript 在通过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

可能是一个初学者的问题,但我有一个数组json对象,我正在循环使用它来提取某些值。如果这些值等于“NO”,那么我想使用jquery隐藏一个div。这应该足够简单,但我不知道数组可以包含多少项,因此我必须确保动态获取所有数字/值对

我的JSON类似于以下内容:

"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();
}