2011-07-08 121 views
2

我在jQuery中從數組中刪除/刪除項目時遇到問題。我在console.log()中運行了結果,它顯示爲一個Object。我創建它返回一個JSON字符串的函數,然後我分析它,下面的例子:jQuery刪除數組索引

var ret = jQuery.parseJSON($.return_json(data)); 

它工作得很好,不過,我運行$.each環路去除該數組/對象的項目。

var old = $("element").find("li[rel=item]"); 
$.each(old, function(index, value) { 
    ret.splice($(value).attr("id"), 1); 
}); 

上面,我正在尋找具有屬性rel = item元素。相同的元素包含一個id,它與返回json解析變量的函數的索引相關。

我跑了開發者工具谷歌瀏覽器來查看錯誤和它打印:

Uncaught TypeError: Object #<Object> has no method 'splice' 

指導的任何話都非常感激。謝謝。

+1

praseJSON是一個錯字? –

+0

啊,我輸入時就是這樣。它實際上是'jQuery.parseJSON'。 – escproxy

+0

只看錯誤就意味着ret上不存在拼接方法。如果ret不是數組,這是真的。我仍然對你想要做的事感到困惑。可以提供示例數據以及您希望輸出的內容。 –

回答

3

splice只是一個數組的方法,而不是對象。 ret在這種情況下,是一個對象,而不是一個數組。

如果你試圖刪除從對象特定的元素,你可以這樣做:

$("element").find("li[rel=item]").each(function(i,v){ 
    delete ret[v.id]; 
}); 

PS。您可以使用.each而不是$.each

如果你真的想把對象變成一個數組,你可以簡單地遍歷它並將元素推入一個數組。

var obj = {"1":"item 1", "2": "item 2", "3": "Item 3"}; 
var arr = []; 
for(i in obj){ 
    if(obj.hasOwnProperty(i)){ 
    arr.push(obj[i]); 
    } 
} 
+0

任何轉換方法? 'jQuery.makeArray()'沒有幫助。 – escproxy

+0

喲想要對象(或數組)做什麼?刪除特定元素? –

+0

從'ret'移除物品。我想'ret'作爲一個數組,所以我可以使用'splice'通過索引去除項目。 – escproxy

0

ret是包含數組的JSON對象,並且不能拼接它。你需要引用你在對象內調用的數組,然後拼接它。

(如果您將代碼發佈到您定義數組的位置,將有所幫助)。

+0

對象中沒有數組。解析它看起來像這個'{「1」:「item 1」,「2」:「item 2」,「3」:「Item 3」}'。 – escproxy

+0

我不明白你說你遇到麻煩的數組拼接,但它實際上不是一個數組?如果它不是數組或字符串,則不能拼接。 –

+0

是的,這是一個對象。如何讓它成爲一個數組? – escproxy

4

好像ret實際上不是一個數組(和可能的對象(例如:{someName: "someVal"})來代替)。

我還假設你的意思是$(value).attr("id")是上述對象示例中的字符串標識符someName。如果是這種情況,你正在使用一個對象,並且你有適當的屬性標識符,那麼幸運的是,比splice更容易解決。

嘗試:

$("element").find("li[rel=item]").each(function() { 
    delete ret[$(this).attr("id")]; 
}); 
+0

我試過這種方法。仍然不起作用。 :/ – escproxy

+1

作爲一個額外的建議...雖然它可能不適用,我會避免使用討論的json結構。如果你的密鑰實際上是「1」,「2」,「3」,那麼把你的數據組織成一個真正的數組「[」item 1「,」item 2「,」item 3「]'也是合適的json,更有意義。另外一個html id應該以一個字母開頭;它只是一個數值是無效的。 –

+0

感謝您的提示。注意:D – escproxy