Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组中的Javascript对象_Javascript_Arrays_Object - Fatal编程技术网

数组中的Javascript对象

数组中的Javascript对象,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试使用Ajax文件上载,如下所示: 如您所见,我需要创建一个qq.FileUploader对象来初始化脚本。但是,我需要能够在不知道元素ID的情况下动态创建这些对象。我尝试过创建这样的东西: var uploader, i = 0; $(".file-upload").each(function() { $e = $(this); i++; uploader[i] = new qq.FileUploader({ element: $(this)[0

我正在尝试使用Ajax文件上载,如下所示:

如您所见,我需要创建一个qq.FileUploader对象来初始化脚本。但是,我需要能够在不知道元素ID的情况下动态创建这些对象。我尝试过创建这样的东西:

var uploader, i = 0;
$(".file-upload").each(function() {
    $e = $(this);
    i++;
    uploader[i] = new qq.FileUploader({
        element: $(this)[0],
        action: 'uploadfile.php',
        allowedExtensions: ['doc', 'docx', 'pdf'],
        multiple: false,
        onComplete: function(id, fileName, responseJSON) {
            $($e).siblings('input').val(responseJSON.newfilename);
        }
    });
});
我了解到,我添加的
[I]
部分破坏了脚本,因为我不能在数组中包含对象


是否有其他方法可以动态创建此对象?它们都需要有一个唯一的名称,否则它们的
onComplete
函数都会被覆盖。我尝试过使用
eval()
,但似乎无法使其正常工作。

您必须首先将
上传程序声明为数组:

var uploader = [];  

由于您未定义变量就声明了变量,因此它的默认值为
undefined
,并且您的代码被转换为类似
undefined[i]
的内容,这会触发错误。

您必须首先将
uploader
声明为数组:

var uploader = [];  

因为您声明变量时没有定义它,所以它的默认值为
undefined
,并且您的代码被翻译成类似于
undefined[i]
的内容,这会触发错误。

必须类似于

var uploader = {}; 
或者uploader为空,您无法为其分配任何内容

编辑

在我看来,有两种观点,如果一个人想要拥有一个数组,那么声明一个数组是有意义的,
var uploader=[]uploader.push()
方法或将其定义为对象
var uploader={}


也可以使用数组执行后一种操作,但在后一种情况下,我认为没有必要维护计数器(
I

var uploader = {}; 
或者uploader为空,您无法为其分配任何内容

编辑

在我看来,有两种观点,如果一个人想要拥有一个数组,那么声明一个数组是有意义的,
var uploader=[]uploader.push()
方法或将其定义为对象
var uploader={}


也可以使用数组执行后一种操作,但在后一种情况下,我认为没有必要维护计数器(
I
这样以后就不需要重新包装它了<代码>$e.sibbins('input').val(responseJSON.newfilename)
$(此)[0]
是冗余的。只需使用
element:this,
还可以删除
i++
只需将
uploader[++i]=new qq.FileUploader({
…划掉它..你可以将
$(“.fileupload”).each(function(){
改为
$(“.fileupload”).each(function(i){
,省去变量i并一起递增。
$e=$(this);
,这样你以后就不需要重新包装它了。
$e('input').val(responseJSON.newfilename);
$(这个)[0]
是多余的。只要使用
元素:这个,
你也可以删除
i++;
然后把
uploader[+++i]=新的qq.FileUploader({
…划掉它..你可以更改
$(.fileupload”)(函数(i){
并将变量i和increment一起省略。我觉得以这种方式为数组赋值是一个奇怪的想法,我宁愿使用uploader.push()就像你使用数组一样???:p你的确切意思是什么,@rlemon?你提倡使用Array.push;但是你的答案将变量指定为一个对象。@rlemon,因为这两个选项都是有效的。要么[]和uploader.push(),要么{}和uploader。[i]=..我觉得以这种方式给数组赋值是一个奇怪的想法,我宁愿使用uploader.push(),就像使用数组一样???:你的确切意思是什么,@rlemon?你主张使用array.push;但是你的答案将变量赋值为对象。@rlemon,因为这两个选项都是有效的。要么[]和uploader.push(),要么{}还有uploader。[i]=…..我没有投反对票,因为这个答案并不是真的错,但OP更可能需要一个真正的数组,而不仅仅是一个对象,因为索引是数字的。因此,
var uploader=[];
可能是一个更好的答案。@Pointy我同意,但接下来是array.push()正如我上面已经指出的那样,听起来更适合我。
TypeError:Object#没有方法“push”
@rlemon,这正是我的观点,如果你将某个东西声明为数组,那么使用特定于数组的函数(如push())是有意义的。如果你只想做某件事[I]='whatever',只要有一个对象就可以了。@qn很好,除了数组将自动维护
.length
属性,而不管属性如何(使用数字“名称”)我没有投反对票,因为这个答案并不是真的错,但OP更可能想要一个真正的数组,而不仅仅是一个对象,因为索引是数字的。因此,
var uploader=[];
可能是一个更好的答案。@Pointy我同意,但接下来是array.push()正如我上面已经指出的那样,听起来更适合我。
TypeError:Object#没有方法“push”
@rlemon,这正是我的观点,如果你将某个东西声明为数组,那么使用特定于数组的函数(如push())是有意义的。如果你只想做某件事[I]='whatever',只要有一个对象就可以了。@qn很好,除了数组将自动维护
.length
属性,而不管如何添加属性(带有数字“名称”)。