通过JSON对象循环后动态分配变量

Dynamically Assign Variables after looping through JSON object

本文关键字:动态分配 变量 循环 JSON 对象 通过      更新时间:2023-09-26

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

任何帮助都是感激的。谢谢。

试着翻转这个问题,就像为一个科学实验定义一个"零假设":要反驳所有项都说"NO",你只需要找到一个说"NO"的值。

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

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 ifor循环中的位置稍后可能会引起混淆,但我保留了它的原样,只做回答您特定问题的更改。)

试试这个:)

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