0

jQueryに配列があります。選択したフィールドで特定の値を持つすべての要素を削除したいと考えています。ループとスプライスを実行すると、エラーが発生します。

$.each(arr,function(idx,val) {
    if (arr[idx].field == "something") {
        arr.splice(idx,1);
    }
});

エラーが発生する理由を理解しています:

Uncaught TypeError: Cannot read property 'field' of undefined

...しかし、最善のアプローチを見つけるのに苦労しています。少しの調査では、grep が正しいアプローチである可能性があるという兆候が示されています。助言がありますか?

* 答え *

結局、これが私がしたことです。誰かがより良い答えを持っていますか?:

for (var idx=0; idx<arr.length; idx++)
{
    if (arr[idx].field == "something") {
        arr.splice(idx,1);
        idx--;
    }
}
4

2 に答える 2

0

そのはず:

$.each(arr,function(idx,val) {
    if (arr[idx] == "something") {
        arr.splice(idx,1);
    }
});

jsFiddle の例

あなたの例fieldでは意味がありません。arr[idx]値を取得します。

于 2013-04-09T19:09:46.703 に答える
0

ループに使用します。arr の長さが動的に変化している

var length= arr.length;
for(var i=0; i<length ; i++){
    if (arr[i].field == "something") {
        arr.splice(i,1);
        length = arr.length;
    }
}
于 2013-04-09T19:08:23.473 に答える