2014-12-22 67 views
0

我通過數據的循環,在一個完美的世界會是什麼樣子:解析數據,並檢查空/不存在的項目

  • item.dataone
  • item.datatwo
  • 項目。 datathree
  • item.datafour

然而,有時一個或一個以上這些項目根本不存在,因此該文件可能看起來像(或更糟):

  • item.dataone
  • item.datathree
  • item.datafour

我宣佈瓦爾:

var one; 
var two; 
var three; 
var four; 

我檢查使用簡單的存在功能類似的項目所以:

$.each(data.d.results, function (index, item) { 
    one = exists(item.dataone); 
    two = exists(item.dataone); 
    three = exists(item.dataone); 
    four = exists(item.dataone); 
} 

function exists(item){ 
if(item){ 
    console.log(item); 
    return item; 
} 
else{ 
    console.log("none"); 
    return "none"; 
} 
} 

如果一個項目存在,但空的,但是沒有說明,當我到了一個不存在的項目(item.datatwo從上面的例子清單),我得到的錯誤:

cannot read description of NULL 

我猜測我不清楚爲什麼我的支票無法使用?如果它不存在,則拋出錯誤的權利,並給var「無」?

如果項目不存在於我的循環中,該怎麼辦?

困惑的noob。

編輯:這裏是一些真實的數據例如:

$.ajax({ 
     url: "SITE/_api/Web/Lists/GetByTitle('Green%20Teams')/items", 
     type: "GET", 
     headers: { 
      "accept": "application/json;odata=verbose" 
     }, 
     success: function (data) { 
      $.each(data.d.results, function (index, item) { 



       title = item.Title; 
       regionname = item.Region_x0020_Name; 
       forestorunit = item.Forest_x0020_or_x0020_Unit; 
       districtorunit = item.District_x0020_or_x0020_Unit; 
       orglocation = item.Org_x0020_Location; 
       members = item.Members; 
       greenteamdescription = item.Green_x0020_Team_x0020_Website.Description; 
       greenteamurl = item.Green_x0020_Team_x0020_Website.Url; 
       locationcity = item.Location_x0020_City; 
       locationstate = item.Location_x0020_State; 
       locationzip = item.Location_x0020_Zip; 

      }); 
     }, 
     error: function (error) { 
      alert(JSON.stringify(error)); 
     } 
    }); 

<d:Title>NNFG Green Team</d:Title> 
       <d:Region_x0020_Name>02 - Rocky Mountain Region</d:Region_x0020_Name> 
       <d:Forest_x0020_or_x0020_Unit>07 - Nebraska NF</d:Forest_x0020_or_x0020_Unit> 
       <d:District_x0020_or_x0020_Sub_x002 m:null="true" /> 
       <d:Org_x0020_Location>Forest</d:Org_x0020_Location> 
       <d:Members m:null="true" /> 
       <d:Green_x0020_Team_x0020_Website m:null="true" /> 
       <d:Location_x0020_City>Chadron</d:Location_x0020_City> 
       <d:Location_x0020_State>NE</d:Location_x0020_State> 
       <d:Location_x0020_Zip>69337</d:Location_x0020_Zip> 
       <d:Latitude m:type="Edm.Double">42.829419</d:Latitude> 
       <d:Longitude m:type="Edm.Double">-102.999907</d:Longitude> 

<d:Title>GMFL NF Sustainability Team</d:Title> 
       <d:Region_x0020_Name>09 - Eastern Region</d:Region_x0020_Name> 
       <d:Forest_x0020_or_x0020_Unit>20 - Green Mtn and Finger Lakes NFs</d:Forest_x0020_or_x0020_Unit> 
       <d:District_x0020_or_x0020_Sub_x002 m:null="true" /> 
       <d:Org_x0020_Location>Forest</d:Org_x0020_Location> 
       <d:Members>John and Sal</d:Members> 
       <d:Green_x0020_Team_x0020_Website m:type="SP.FieldUrlValue"> 
        <d:Description>GMFL NF Sustainability Team Intranet Site</d:Description> 
        <d:Url>http://fsweb.gm.r9.fs.fed.us/library2/sustainability/index.htm</d:Url> 
       </d:Green_x0020_Team_x0020_Website> 
       <d:Location_x0020_City>Rutland</d:Location_x0020_City> 
       <d:Location_x0020_State>Vermont</d:Location_x0020_State> 
       <d:Location_x0020_Zip>05701</d:Location_x0020_Zip> 
       <d:Latitude m:type="Edm.Double">43.615355</d:Latitude> 
       <d:Longitude m:type="Edm.Double">-72.922433</d:Longitude> 

的問題是Green_x0020_Team_x0020_Website要麼有說明和URL或不...存在,或不...

+0

你的支票是一個有參數的函數。但是,如果項目不存在,你如何將它作爲參數傳遞。 – Craicerjack

+0

正確的權利...是完全有道理的。所以如果它不存在,那麼是什麼?我如何爲其他變量指定我的變量? – jasonflaherty

+0

@Craicerjack你可以傳遞undefined作爲參數 – SimpleJ

回答

1

可以默認情況下,通過使用||運營商這樣的變量:

var foo = bar || "this is the default value if bar is falsey"; 

在你的代碼的問題是這條線:

greenteamdescription = item.Green_x0020_Team_x0020_Website.Description;

如果itemGreen_x0020_Team_x0020_Website是falsey,您將收到一個錯誤。有多種方法可以避免這個問題。最簡單的是默認的對象爲空對象是這樣的:

greenteamdescription = ((item || {}).Green_x0020_Team_x0020_Website || {}).Description;

這保證了即使itemGreen_x0020_Team_x0020_Website是falsey,沒有錯誤將被拋出。但greenteamdescription將不明確,如果itemGreen_x0020_Team_x0020_Website是falsey。

你可以在這條線遇到同樣的問題:

greenteamurl = item.Green_x0020_Team_x0020_Website.Url;

有處理此類問題的更強大的系統。如「brototype」: https://github.com/letsgetrandy/brototype

+0

我仍然得到NULL,因爲item.datatwo甚至沒有被我的循環觸及的對象,因爲它不存在。 – jasonflaherty

+0

@jasonflaherty是'item' null還是'item.datatwo' null? – SimpleJ

+0

項目包含其他數據。 item.dataone,item.datathree,item.datafour例如仍然存在。 item.datatwo不在輸出中。這是我認爲變量的使用會有所幫助,因爲我可以像你在你的答案中定義的那樣做... – jasonflaherty

-1
$.each(data.d.results, function (index, item) { 
    item = item || {}; 
    one = exists(item.dataone); 
    two = exists(item.dataone); 
    three = exists(item.dataone); 
    four = exists(item.dataone); 
} 

如果項目爲null,將被默認爲對象,並不會有錯誤。

+1

項目存在 - 只是item.datatwo不 – Craicerjack