-1

私はオブジェクトの配列を持っています。3つのオブジェクトがありました

コンソールで印刷します。 インデックス 0 から始まる 3 つのオブジェクトの配列

次に、arr.splice(0,1) を使用して 1 つずつ削除しました。これを 3 回繰り返しました。次に、新しいオブジェクト(空の配列と思われるもの)を追加し、コンソールに配列全体を出力しました。 空の配列にオブジェクトを追加した後のコンソール出力

ご覧のとおり、それは配列内の唯一のオブジェクトですが、インデックス 0 で始まるのではなく、インデックス 3 で始まります。また、0、1、2 のインデックスは存在せず、「null」などではありません。いいね。彼らは去った。どうしたの?

これは、削除するための実際のコードです。私はそれを3回呼び出します。

this.removeSelected = function () {

        //Remove from array
        //I have verified that selFramePos=0 many times. 
        f.splice(selFramePos, 1);
}

各配列スロットに保持するこのオブジェクト (単なるデータの集まりで、特別なことは何もありません):

  Data = {
        normal : normData,
        imageUrl: selfDefaults.viewport.src,
        topLeftX: norm(cf.paper.width, vpo.cx, vpw),
        topLeftY: norm(cf.paper.width, vpo.cy, vpw),
        width: norm(cf.paper.width, vpo.width, vpw),
        height: norm(cf.paper.width, vpo.height, vpw),
        rotation: selfRotator.getRotation().rotation,
        cropping:
        {
            shape: selfSelector.getSelection().shape,
            tlx: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().left, vpw),
            tly: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().top, vpw),
            w: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().width, vpw),
            h: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().height, vpw),
            color: selfSelector.getSelection().color,
            opacity: selfSelector.getSelection().opacity
        },
        filters: null,
        transition:
{
    type: 'dissolve',
    time: 500
},
        requireUserInput: true
    }

私の問題は、次のようにインデックス番号を増やして新しい配列スロットを作成し続けたことです。

        var i=0
        function add2Array () {
        arr[i]='something'
        i++
        }

そのため、関数を呼び出すたびに、インデックスと位置を操作する代わりに、並べ替えの「一意の ID」が作成されました。

i を削除して、任意にインデックスを増やす代わりに「プッシュ」を使用することで修正しました。

4

2 に答える 2