循环遍历JSON对象后动态分配变量

时间:2014-03-15 20:34:22

标签: javascript jquery arrays json

可能是一个初学者问题,但我有一个数组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()

}

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

试试这个:)

var account    = this.json.account;
var hide_count = 0;
for ( var i = 0; i < account.length; i++ ) {
   if(account[i].transferAllowed=="NO") hide_count++;
}
if(hide_count == account.length){
   $("#div").hide();  
}

答案 1 :(得分:0)

尝试翻转问题,例如定义&#34; null假设&#34;对于一个科学实验:反驳所有项目都说&#34; NO&#34;,你只需要找到说&#34的单个值34; NO&#34 ;.

这意味着您只需要在循环中进行简单检查即可找到答案:

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

由于您只需要一个值,您实际上可以使用break;语句停在第一个

上:

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

(正如评论中指出的那样,var i循环中for的位置可能会在以后引起混淆,但我已将其保留原样只进行回答的更改你的具体问题。)