0

tl; dr; 私の説明がなくても、以下のコードと出力を見て、何かが怪しいことがわかります。Spliceは、スプライスしたインデックスを返しますが、データは配列に残ります。

だから私はほとんど配列のようにキー設定されたオブジェクトを持っています(0,1,2,3 ...など)。各オブジェクトキーには配列値があります。配列はオブジェクトの配列です。これは、私が使用している基本構造を示す簡略化されたオブジェクトです。

obj = {
    '1': [{},{},{},{}],
    '2': [{},{},{},{}],
    '3': [{},{},{},{}]
};

それらの配列の1つから配列インデックス(オブジェクト)の1つをスプライスアウトする必要があるコードがいくつかあります。これはコードであり、コンソールがすべてをログに記録します(以下の出力を示します)。

console.log(indices_to_remove);
for(j = 0; j < indices_to_remove.length; j++) {
    console.log("i: " + i)
    console.log('j: ' + j)
    console.log(this._index);
    console.log(this._index[i].splice(indices_to_remove[j], 1));
    console.log(this._index);
}

2番目の「console.log(this._index);」に注意してください。スプライスされたオブジェクトは、元の配列の一部のままです。this._index[2]のアイテムが1つ少なくなると思います。また、インデックス0をスプライスアウトする必要がありますが、インデックス1が返されます。

出力は次のとおりです。 コンソール

ですから、私が間違っているかもしれないことについて誰かが何か洞察を持っているなら、声を上げてください!

ありがとう、マイク

4

1 に答える 1

4

表示されているコードには多くの欠落があるため、推測する必要がありました。このコードを実行したところ、期待どおりに動作します。

var obj = {
    '1': [{},{},{},{}],
    '2': [{},{},{},{}],
    '3': [{},{},{},{}]
};

var indices_to_remove = [1];

var i = 1;
alert(indices_to_remove);
for(j = 0; j < indices_to_remove.length; j++) {
    alert("i: " + i)
    alert('j: ' + j)
    alert(obj[i]);
    alert(obj[i].splice(indices_to_remove[j], 1));
    alert(obj[i]);
}

ただし、削除するインデックスの配列で逆方向にループすることを検討する必要があります。最初のアイテムを削除すると、2 番目のアイテムが最初のアイテムになります。次に 2 番目のアイテムを削除すると、実際には 3 番目のアイテムが削除されます。

于 2009-12-09T08:28:02.407 に答える