如何在javascript中读取对象文件列表数组

How can i read an object filelist array in javascript?

本文关键字:取对象 文件 列表 数组 读取 javascript      更新时间:2023-09-26

我创建了一个数组来存储所选文件的列表。好吧,老实说,我查了一下代码,当我意识到它对我的目的有效时,我使用了它。现在我需要访问这个数组才能手动删除一些文件,但我尝试过使用每个扇区的索引,但这不起作用。

这就是我创建数组和存储文件的方式。

 var files = [];
 $("button:first").on("click", function(e) {
                $("<input>").prop({
                    "type": "file",
                    "multiple": true
                }).on("change", function(e) {
                    files.push(this.files);
                }).trigger("click");
});

如果数组文件[]包含对象fileList或从数组中获取索引,我如何读取它?

以下是我如何理解您的代码:

每次单击dom中的第一个按钮时,都会生成一个接受多个文件的文件输入对话框。返回后,对话会发出一个change事件,其中files变量(FileList对象)附加到函数上下文(this)。您的代码将新创建的FileList推送到files数组中。由于输入接受多个文件,所以推送到files数组上的每个对象都是FileList对象。

因此,如果您想遍历文件数组中的所有元素,可以在change事件处理程序中放入一个函数:

var files = [];
$("button:first").on("click", function(e) {
    $("<input>").prop({
        "type": "file",
        "multiple": true
    }).on("change", function(e) {
        files.push(this.files);
        iterateFiles(files);
    }).trigger("click");
});

function iterateFiles(filesArray)
{
    for(var i=0; i<filesArray.length; i++){
        for(var j=0; j<filesArray[i].length; j++){
            console.log(filesArray[i][j].name);
            // alternatively: console.log(filesArray[i].item(j).name);
        }
    }
}

在我编写的iterateFiles()函数中,filesArray[i][j]并不是一个真正的多维数组,而是一个包含FileList对象的一维数组,这些对象的行为非常像数组。。。除了不能从中删除/拼接项目之外——它们是只读的。

有关为什么不能删除的更多信息,请参阅:如何从FileList 中删除文件

由于您使用的是jQuery,因此可以使用$.grep

files=$.grep( files, function(elementOfArray, indexInArray){
       /* evaluate by index*/
       return indexInArray != someValue;
       /* OR evaluate by element*/
       return  elementOfArray != someOtherValue;
});

API参考:http://api.jquery.com/jQuery.grep/

类似的东西?

for(var i = 0; i < files.length; i++) {
   alert(files[i][0].name);
   if (files[i][0].name == 'file.jpg') {
      files.splice(i, 1) //remove the item
   }
}

也就是说,由于您选择文件的方式,每个文件列表中总是有一个文件。因此,对于每个文件列表,您只对其中的第一个文件感兴趣。对于每个文件,您只需获得此处定义的属性:http://help.dottoro.com/ljbnqsqf.php