2014-04-29 58 views
0

我知道必須有更好的方法來做到這一點。我有一對嵌套的javascript對象集合。更好的方法來做嵌套集合的JavaScript中的布爾數組

Objects 
    Field1 
    Value 
    Field2 
    Value 
    Field3 
    Value 
Objects2 
    Field1 
    Value 
    Field2 
    Value 
    Field3 
    Value 
Objects3 
    Field1 
    Value 
    Field2 
    Value 
    Field3 
    Value 

我需要獲取對象1,2和3的字段的值,並檢查它們是否爲真或假。這是我現在使用的代碼。

var valid = []; 
if (objects instanceof Array) { 
    for (var i = 0; i < objects.length; i++) { 
     var fieldIsFull = []; 
     // Loop through all fields to check if empty and build array 
     for (var j = 0; j < objects[i].Fields.length; j++) { 
      if (objects[i].Fields[j].isRequired) { 
       if (objects[i].Fields[j].Value != null || 
        objects[i].Fields[j].Value != undefined) { 
        fieldIsFull.push(true); 
       } else { 
        fieldIsFull.push(false); 
       } 
      } 
     } 

     // Check array for any false value. 
     if ($.inArray(false, fieldIsFull) >= 0) { 
      valid.push(false); 
     } else { 
      valid.push(true); 
     } 
} 
// Check array for any false value. 
if ($.inArray(false, valid) >= 0) { 
    return false; 
} else { 
    return true; 
} 

必須有更好的方式來做我正在做的事情。任何人都可以用更高效的方式幫助我做到這一點嗎?

SOLUTION: 這是我結束了的代碼,因爲我只需要虛假的價值。

if (objects instanceof Array) { 
    for (var i = 0; i < objects.length; i++) { 
     // Loop through all fields to check if empty 
     for (var j = 0; j < objects[i].Fields.length; j++) { 
      if (objects[i].Fields[j].isRequired) { 
       if (objects[i].Fields[j].Value == null) { 
        return false; 
       } 
      } 
     } 
} 
return true; 
+0

這兩個答案(安德魯和波蒂)都很棒。但最終我只需要虛假的價值。沒有必要對實際值進行操作。 – coryrwest

回答

2

它看起來像你的函數不返回數組的內部值。如果是這樣的話,請儘早退出 - 當你做fieldIsFull.push(false);,而不是return false;。如果它使功能結束,返回true。您可以刪除處理fieldIsFullvalid陣列的任何行。

2

你不需要建立一個數組;你可以跟蹤你是否看到任何帶有布爾操作的false值。您也不需要同時比較nullundefined,因爲!=會將undefined轉換爲null

for (var i = 0; i < objects.length; i++) { 
    var allGood = true; 
    // Loop through all fields to check if empty and build array 
    for (var j = 0; allGood && j < objects[i].Fields.length; j++) { 
     if (objects[i].Fields[j].isRequired) { 
      allGood = allGood && objects[i].Fields[j].Value != null; 
     } 
    } 

    valid.push(allGood); 
} 

編輯 —是從什麼@AndrewVarnerin對方回答說是真實的 - 只要你找到一個false(空)「值」,只是return false;馬上,因爲這就是該函數將做最終反正。但是,如果您要添加代碼來爲每個空值執行某些操作,那麼您將需要遍歷所有內容(如果是這樣,則可以在上面的for循環中對「allGood」進行測試)。