0

問題は奇妙です: splice 関数によって配列 (連想) からいくつかの要素を削除した後、いくつかの要素を追加したところ、突然「不十分な」要素が発生しました。以下にログがあります(「//」の後に、これに対する私のコメントがあります):

// adding first element; array length = 1
["asdasdasd"] microblog.js:48

// adding second element; array length = 2
["asdasdasd", "asdasdasd"] microblog.js:48 

// adding third element;  array length = 3
["asdasdasd", "asdasdasd", "asdasdasdqwe"] microblog.js:48 

// removing second element;  array length = 2
["asdasdasd", "asdasdasdqwe"] microblog.js:66 

// removing third element; array length = 1
["asdasdasdqwe"] microblog.js:66

// adding new element;  array length = 4
["asdasdasdqwe", undefined × 2, "asdasdqwrevcvxzvvxwfrqeqwewq"] 

そして、これは私が要素を追加する方法です:

(...)
this.list[currId] = text;
(...)

そして、これが要素を削除する方法です

(...)
this.list.splice(currId, 1);
(...)

この未定義の要素を回避するにはどうすればよいですか?

4

2 に答える 2

1

A ) -> 現在要素を使用して、次に追加する位置を追跡し、決して減少させません:

var arr = []
for (var currId = 0; currId < 4; currId++) {
    arr[currId] = currID
}
//arr = [1, 2, 3, 4]
arr.splice(1, 3); // arr = [1]
// if currID is still 3
arr[currId] = "text"; // now arr = [1, undefined, undefined, "text"]

その場合、アイテムを削除して次の場所に追加するときに、currId を減らす必要があります。

またはB ) -> そのまま使用Array.push()

var arr = []
for (var currId = 0; currId < 4; currId++) {
    arr.push(currId);
}
//arr = [1, 2, 3, 4]
arr.splice(1, 3); // arr = [1]
arr.push("text"); // now arr = [1, "text"]

配列の末尾に要素を追加するだけでよい場合は、 Bの方がはるかに優れたソリューションです。

編集:「currID」を配列内の次の位置にアイテムを配置するように維持したいので、これを行うたびに、

this.list[currId] = text;

あなたはこれに従ってください:

currId++;

それが正しければ、反対に、配列からオブジェクトをスプライスするときにそれを減らすことになります。たとえば、次のようになります。

var arr = [1, 2, 3, 4];
currId = 4 // The next position to add at is 4.
removeCount = 3;
arr.splice(1, removeCount); // arr = [1]
currId -= removeCount;

しかし、率直に言って、これはこれを行うにはひどい方法です。より良い方法を見つけるのに役立つように、もう少し情報を提供してください。

お役に立てれば。

于 2012-06-22T15:18:15.760 に答える
0

何のcurrIdために?

要素を(最後に)追加するときは、次のようにする必要があります。

this.list.push(text)

また

this.list[this.list.length] = text

インデックスで要素を変更します。

于 2012-06-22T15:18:43.083 に答える