传递对象数组-意外令牌[

Passing object array - Unexpected token [

本文关键字:意外 令牌 数组 对象      更新时间:2023-09-26
function showConfirm(reArray) {
    var theHTML = '';
    var optionArray = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6", "Option 7"]; 
    var myButtons = {};
    var j = 1;
    for(var i = 0; i < reArray.length; i++){
                theHTML  +='<div style="text-align:center">' 
                         + '<span>'+j+'.</span>&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+reArray[i].RoadNo+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+compass_image(reArray[i].Bearing)+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '</div><br/>'    
                j++;
        }
    for(i = 0; i < reArray.length; i++){
    ERROR HERE -----> var placeFunction = function(reArray[i]){
                                plotRoadInfo(reArray[i]);
                                $(this).dialog("close");
                            };
                            myButtons[optionArray[i]] = placeFunction;
    }
    $( "#dialog-modal" ).dialog({
      height: 300,
      modal: true,
      buttons: myButtons
    });
    $('#multipleRE').append(theHTML);
}

这个函数得到一个对象数组(reArray),然后为jquery对话框创建一个按钮数组(myButtons)。我试图将reArray[I]传递给每个按钮将使用的函数,该函数将执行plotRoadInfo(reArray[I]);

我总是收到"意外的标记[",我也不明白为什么。

在JavaScript中不需要指定参数的类型,只需使用名称,然后将其用作函数中的数组。

var placeFunction = function(reArray){
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};

我认为你甚至不需要指定它,尽管你指的是内部函数可以访问的数组。

var placeFunction = function() {
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};

正如Pointy指出的那样,这将遇到i变量共享的问题,因此每个函数将引用reArray[reArray.length],因为当i === reArray.length时循环将完成。解决这个问题的一种常见方法是调用一个接受i作为参数的函数,该函数将返回一个函数。

var placeFunction = (function (item) {
    return function() {
        plotRoadInfo(item);
        $(this).dialog("close");
    };
}(reArray[i]));

阅读闭包以更深入地理解它是如何工作的。下面是另一个这样的例子

您的语法不正确。

我相信你想做的是:

var placeFunction = 
    (function(arrayitem){
        return function(){
                   plotRoadInfo(arrayitem);
                   $(this).dialog("close");
               };
     })(reArray[i]);
myButtons[optionArray[i]] = placeFunction;

为什么参数有索引?

function(reArray[i])

你的意思是

function(reArray)