我有一个处理拖放文件的功能:
function createDropHandlers() {
var target = document;
if (target === null) {
return false;
}
// attach the 'dragover' event to the container
target.addEventListener('dragover', function(event) {
event.preventDefault();
}, true);
// attach the 'drop' event to the container
target.addEventListener('drop', function(event) {
event.preventDefault();
var files = event.dataTransfer.files;
// if (files.length > 3)
// do something like
// files.slice(files.length-3, files.length);
for (var i = 0; i < files.length; i++) {
processFile(files[i]);
// ...
}
}, true);
}
我想做的是在for
循环之前(以及以任何方式“处理”文件之前)检查是否拖动了3个以上的文件,如果是,只需切片“数组”最后3个元素。我知道FileList
是只读的,所以我不确定我在这里有什么选择来实现这个目标...
我不会上传文件,在“处理”它们之后我就不需要File
个对象了。我需要做的就是检查文件是否是音频文件,从中读取一些元数据并在页面上显示元数据。
答案 0 :(得分:2)
slice()是一个来自Array原型的方法。虽然它返回一个新数组,但它可能不在FileList原型中。您可以使用Array.prototype.slice方法并将其应用于文件列表:
Array.prototype.slice.call( fileList ); //will return an array-copy of the filelist
Array.prototype.slice.call( fileList, 0, 3 ); //Then simply use the slice arguments at your convenience
你也可以在参数上使用(并且经常会在js-libraries代码中看到)这个技巧。请注意,切片不会像splice()那样修改原始对象。
您可以查看https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice#Array-like以获取有关MDN的说明。