2016-04-21 122 views
-1

我想用JSON發送一個對象,我用for循環迭代這個對象。我發送的JSON是正確的,但問題是數組中存在空值。我認爲它與myValue.children[index]= item; 我試過.filter()方法,但它沒有解決我的問題,因爲返回的數組是空的。我也試過一個條件,但我只有4個值被檢測到。 這是我收到的JSON:刪除陣列上的空值

{ 
    "name":"object", 
    "children":[ 
    { 
     "name":"myName", 
     "children":[ 
     { 
      "name":"aNumber", 
      "size":12345 
     } 
     ] 
    }, 
    null, 
    null, 
    null, 
    { 
     "name":"myName", 
     "children":[ 
     { 
      "name":"aNumber", 
      "size":12345 
     } 
     ] 
    }, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    { 
     "name":"myName", 
     "children":[ 
     { 
      "name":"aNumber", 
      "size":12345 
     } 
     ] 
    }, 
    { 
     "name":"myName", 
     "children":[ 
     { 
      "name":"aNumber", 
      "size":12345 
     } 
     ] 
    } 
    ] 
} 

這是我的代碼:

function myFunction(index, tabItem , callback){ 
    var result = ''; 
    var myValue = {}; 
    var childrenTicket = []; 
    myValue.name = "object"; 
    myValue.children = childrenTicket; 
    for (index in tabItem) { 
     try{ 
      var currentItem = tabItem[index]; 
      var Object =currentItem.issuelinks.issuelinktype.outwardlinks.issuelink; 
      for(var SeveralObject in Object) { 
       var item = {}; 
       var specificObject = Object[SeveralObject]; 
       var main = specificObject._; 
       var id = specificObject.$.id; 
       var descriptionObject = {}; 
       descriptionObject.name = id; 
       descriptionObject.size = 12345; 
       item.name = main; 
       if (myValue.children[index] == undefined){ 
        console.log('undefined detected'); 
       } 
       myValue.children[index]= item; 
       //result = result + (myValue); 
       item.children = [descriptionObject]; 
       sendJson(myValue); 
       callback(result); 
      } 
     } catch(ignored){ 
     } 
    } return result; 
} 

希望你能幫助我。

回答

0

嘗試這樣:

for (var i in obj) { 
    if (obj[i] === null || obj[i] === undefined) { 
    delete obj[i]; 
    } 
} 

obj是您的JSON對象。

+0

我已經試過'itemTicket.children [index]'但它不起作用,你認爲我用它在好物體上嗎? – Anonyme

+0

您需要傳遞整個JSON對象作爲'obj'。 – 2016-04-21 07:03:25

+0

我在我的JSON文件上使用它,但結果是完全一樣的(對於itemTicket中的變量){ if(itemTicket [i] === null || itemTicket [i] === undefined){ delete itemTicket [一世]; (itemTicket);' – Anonyme

0

您可以使用underscore模塊並使用其compact方法。

鏈接:http://underscorejs.org/#compact

+0

我在itemTicket上使用它,但是作爲.filter(),返回一個靜態數組。 sendJson(newChild);' – Anonyme

+0

你如何使用它?我剛剛用JSON測試過它,它工作得很好 – 2016-04-21 07:15:35

+0

我在itemTicket上使用它,我創建了一個新變量,然後發送這個新變量。 – Anonyme

0

可以刪除這樣

for (var ite in ObjJson) 
      { 
       if(ObjJson[ite]==null) 
       { 
       console.log('ys null'); 
       delete ObjJson[ite]; 
       } 
      } 
+0

同樣的問題,我使用它之前發送和任何空值被刪除:'for(var ite in itemTicket) { if(itemTicket [ite] == null ) { 控制檯。log('ys null') delete itemTicket [ite]; } } sendJson(itemTicket);' – Anonyme

+0

我試過對我有用 – Asad

0

空值嘗試使用underscore.js

_.compact(array) 

它會刪除所有空,假的,不確定的等價值。

使用underscore.js在編寫循環或自己的東西方面的​​優勢是underscore.js函數將比循環更快,並且出錯的機會會更少。

+0

我非常懷疑下劃線的循環會比你自己寫的循環更快。你爲什麼這麼說? – 2016-09-04 16:28:11