2017-06-30 120 views
-1

我試圖檢查密鑰是否與calendartpoint有關。檢查密鑰是否有值

起初我試圖去檢查是否包含calendartpoint鍵,但後來我意識到它們總是會成爲鍵。我想檢查calendartpoint鍵是否具有值的原因是因爲有時它們不會。

我的嘗試低於packageContents下面的對象。

有誰知道我可以檢查鍵是否有值?

var packageContents = { 
     'packages': [ 
      { 
       'price': '32', 
       'name': 'Gold Bundle Package', 
       'calendar': { 
        'type': '2year', 
        'color': 'Brushed Nickel', 
       }, 
       'tpoint': { 
        'type': 'Gold', 
        'touches': '21', 
        'years': '7', 
       } 
      }, 
      { 
       'price': '23', 
       'name': 'Bronze Bundle Package', 
       'calendar': { 
        'type': '2year', 
        'color': 'Brushed Nickel', 
       }, 
       'tpoint': { 
        'type': 'Bronze', 
        'touches': '9', 
        'years': '7', 
       } 
      } 
     ] 
    }; 

packageContents['packages'].forEach(function (bun) { 
    if (bun['calendar'].length >= 1 && bun['tpoint'].length >= 1) { 
     var bundleSet; 
     console.log(bundleSet); 
     console.log('Working'); 
    } 
}); 

編輯:

var packageContents = { 
     'packages': [ 
      { 
       'price': '23', 
       'name': 'Bronze Bundle Package', 
       'calendar': { 
        'type': '2year', 
        'color': 'Brushed Nickel', 
       }, 
       'tpoint': { 
        'type': '', 
        'touches': '', 
        'years': '', 
       } 
      } 
     ] 
    }; 




var bundleSet = ''; 

    packageContents['packages'].forEach(function (obj) { 
     if (typeof obj.calendar !== 'undefined' && typeof obj.tpoint !== 'undefined') { 
      bundleSet = "Bundle"; 

     } 
     else { 
      bundleSet = "not bundle" 
     } 
     console.log(bundleSet); 
    }); 

回答

3

.forEach()迴路循環在packageContent.packages數組中的對象,所以它的使用變量名要提醒你的是一個好主意。然後,由於您知道這些對象中的鍵的靜態名稱,因此您無需將它們作爲使用括號表示法([])的字符串傳遞給對象,只需在實例上使用點表示法即可。

最後,你只是想檢查是否有值存儲在這些鍵,所以檢查,看看是否存儲的數據類型是否undefined會做。

var packageContents = { 
 
     'packages': [ 
 
      { 
 
       'price': '32', 
 
       'name': 'Gold Bundle Package', 
 
       'calendar': { 
 
        'type': '2year', 
 
        'color': 'Brushed Nickel', 
 
       }, 
 
       'tpoint': { 
 
        'type': 'Gold', 
 
        'touches': '21', 
 
        'years': '7', 
 
       } 
 
      }, 
 
      { 
 
       'price': '23', 
 
       'name': 'Bronze Bundle Package', 
 
       'calendar': { 
 
        'type': '2year', 
 
        'color': 'Brushed Nickel', 
 
       }, 
 
       'tpoint': { 
 
        'type': '', 
 
        'touches': '', 
 
        'years': '', 
 
       } 
 
      } 
 
     ] 
 
    }; 
 

 
var bundleSet = null; 
 
packageContents.packages.forEach(function (obj) { 
 

 
    // We are now looping over each top-level object in the main array. 
 
    // To see if each of the properties in quesiton of those objects have values, 
 
    // we need to loop over those properties 
 
    for(var prop in obj){ 
 
    
 
    // We're only interested in "calendar" and "tpoint" 
 
    if(prop === "calendar" || prop === "tpoint"){ 
 
     
 
     // These properties store objects of their own and it is these properties we need to check 
 
     for(var subProp in obj[prop]){ 
 
    
 
     // Since you know the key names, you can access them directly on the instance 
 
     // and simply see if they have values by checking that they are not undefined 
 
     if (obj[prop][subProp] !== "") { 
 
      bundleSet = true; 
 
     } else { 
 
      bundleSet = false; 
 
     } 
 
     } 
 
    } 
 

 
    } 
 
    console.log(bundleSet); 
 
});

+0

謝謝!所以typeof只是返回未定義或定義? – Paul

+0

@Paul'typeof'將會返回JavaScript類型(''object「'''''''''''''''''''',''''''''''''''' 「沒有定義」,當沒有價值。 –

+0

那麼爲什麼它顯示未定義呢?所有的鍵都有值?只是困惑。 – Paul