我有一个存储在密钥中的数组,请参阅值格式:
{id: 0, data: mydata}
Run Code Online (Sandbox Code Playgroud)
我还有一个与该ID相对应的列表,用于删除文件和删除元素.
我遇到的问题是当使用Javascript splice函数(从数组中删除对象)时,它会更改索引值.
请参阅以下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);
}
Run Code Online (Sandbox Code Playgroud)
如何将对象存储在数组的对象INSTEAD中,这样就可以修复键.
var fileQuery = {
0: {
id: 0,
data: "some data"
},
1: {
id: 1,
data: "some more data"
}
};
Run Code Online (Sandbox Code Playgroud)
使用delete命令从对象中删除项目.
例如:
delete fileQuery[0];
Run Code Online (Sandbox Code Playgroud)
ALSO indexOf不会比较数组BUT中对象的属性,而是比较对象本身的引用.这意味着array.indexOf返回您给出的对象的索引作为arg,因此{id: fid}实际上是在该点创建一个新的唯一对象.不幸的是indexOf,它总是返回-1,因为它永远不会在数组中找到新创建的对象.
查找要查找的对象的索引的最佳方法是手动遍历数组并将所有元素的id属性与fid进行比较.我担心在这种情况下array.indexOf不会工作.