2010-05-26 135 views
3

我對JSON和數組有一些問題。我一直在用JSON搞亂一會兒,並試圖通過重構舊的實現來使用一些生產。我所擁有的是兩個隱藏的文本字段,一個格式爲[1] [2] [3]等的存儲ID,另一個名稱爲[name1] [name2] [name3],所以我認爲這將是一個很好的練習, JSON和重構,並使用更易讀的對象符號。從數組中刪除JSON對象會創建「未定義」對象

無論如何,我離題了。我遇到的問題是一個有趣的問題,我發現如何「推」JSON到數組中,但問題出現在我的刪除方法。當我從數組中刪除一個對象時,逗號持續存在,創建「未定義」的對象。我做錯了,有沒有更好的辦法?

添加2項陣列(所有細)

[{id:"1", name:"Test (ID: 1)", status:"new"}, {id:"2", name:"Test 2 (ID: 2)", status:"new"}] 

刪除1個項目來自陣列(逗號被留在)

[{id:"1", name:"Test (ID: 1)", status:"new"}, ,] 

添加另一項目返回到陣列中,逗號現在導致「未定義」對象

[{id:"1", name:"Test (ID: 1)", status:"new"}, , {id:"2", name:"Test 2 (ID: 2)", status:"new"}] 

這裏是我的刪除功能

function removeFromList(Id) { 
    var txtIDs = $("#<%= selected.ClientID %>"); 
    var data = eval(txtIDs.val()); 

    for (var i = 0; i < data.length; i++) { 
     alert(typeof (data[i])); 
     if (typeof(data[i]) != 'undefined') { 
      if (data[i].id == Id) 
       delete data[i]; // alert(data[i].name); // 
     } 
    }  
} 

感謝在這找我:)

羅布

回答

0

刪除是用於從對象中刪除鍵的操作員 - 你不該」不是真的用它從Array中移除項目,因爲它不會達到你期望的效果。您可以使用拼接或切片等數組方法來操作數組。

MDC Array methods documentation會有所幫助:)

或者,你可以使用這樣的功能:

function removeArrayEl(arr, index){ 
    newArr = []; 
    for(var i = 0, l = arr.length;i < l; i++){ 
     if(i != index){ 
      newArr.push(arr[i]); 
     } 
    } 
    return newArr; 
} 

[編輯] 正如評論者所指出的,陣列拼接方法對於這份工作來說是正確的工具,但我會留下這個功能以供參考。 [/編輯]

+1

你有沒有聽說過Array.slice?這是一個本地函數,用於從數組中刪除元素。 – CharlesLeaf 2010-05-26 11:03:46

+0

使用'splice'方法肯定會更容易。 – Gumbo 2010-05-26 11:04:52

+0

你說「沒有一個跨瀏覽器功能'從陣列的中間移除一個數組元素,爲其他元素重新編制索引'」。是的,你提到它:'splice'。例如:'var a = [「a」,「b」,「c」]; a.splice(1,1);'將從數組中移除位置1(「b」)處的項目。 – 2010-05-26 11:05:31