1

キーに格納されている配列があります。値の形式を参照してください。

{id: 0, data: mydata}

また、ファイルの削除と要素の削除のために、そのIDに対応するリストがあります。
私が抱えている問題は、Javascriptスプライス関数(配列からオブジェクトを削除するため)を使用すると、インデックス値が変更されることです。

以下のJavaScriptを参照してください。

function setupFileList(file, id){
    var list_of_file = document.getElementById("list_of_file");
    var name_of_file = file.name;
    var size_of_file = 0;
    var file_reader = new FileReader();
    file_reader.onload = function(e){
        var imgsrc = e.target.result;
        if(file){
            if(file.size > 1024 * 1024)
                size_of_file = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + "MB";
            else
                size_of_file = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
        }

        list_of_file.innerHTML += '<div id="file-'+id+'" class="filesUp"><img class="imgUp" src="' + imgsrc +'" width="100px" height="100px"><div class="progressUp"><span>' + name_of_file + ' / ' + size_of_file +'</span></div><a href="#" onclick="deleteUp(\''+id+'\')">Delete</a></div>';
    };
    file_reader.readAsDataURL(file);
};


function deleteUp(fid){
    var file_query = fileQuery.indexOf({id: fid});
    fileQuery.splice(file_query, 1);
    console.log(file_query);
}
4

1 に答える 1

5

配列のオブジェクトINSTEADにオブジェクトを格納するのはどうですか。そうすれば、キーが固定されます。

var fileQuery = {
   0: {
      id: 0,
      data: "some data"
   },
   1: {
      id: 1,
      data: "some more data"
   }
};

オブジェクトからアイテムを削除するには、deleteコマンドを使用します。
例えば:

delete fileQuery[0];

また、配列内のオブジェクトのプロパティindexOfを比較するのではなく、オブジェクト自体の参照を比較します。これはarray.indexOf、指定したオブジェクトのインデックスをargとして返すことを意味するため、{id: fid}実際にはその時点で新しい一意のオブジェクトを作成しています。残念ながらindexOf、配列内で新しく作成されたオブジェクトが見つからないため、常に-1が返されます。

探しているオブジェクトのインデックスを見つける最良の方法は、配列を手動でループし、すべての要素のidプロパティをfidと比較することです。この場合は機能しないのではないかと思いますarray.indexOf

于 2013-02-04T22:38:04.017 に答える