2011-07-08 10 views
2

jQueryの配列から項目を削除/削除する際に問題があります。私はconsole.log()で結果を実行し、Objectとして表示します。私は、JSON文字列を返す関数を作成しましたし、私は以下の例は、それを解析します。それがうまく動作jQuery delete array index

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の要素を検索しています。同じ要素には、json解析変数を返す関数のインデックスに関連するidが含まれています。

私は、エラーを確認するためにGoogle Chromeで開発者ツールを実行し、それが印刷さ:

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

指導の任意の言葉はあまり理解されるであろう。ありがとう。

+1

praseJSONはタイプミスでしょうか? –

+0

ああ、それは私がそれを打ち込んだときだけ私です。実際には 'jQuery.parseJSON'です。 – escproxy

+0

エラーを見るだけで、スプライス方法がretに存在しないことを意味します。 retが配列でない場合はtrueです。私はあなたがしようとしていることについてまだ混乱しています。データの例と出力を希望するものを提供することができます。 –

答えて

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

はい、それはオブジェクトです。どのようにしてそれをArrayにしますか? – 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