在 javascript 中将数组索引作为参数传递

Passing array index as argument in javascript

本文关键字:参数传递 索引 数组 javascript      更新时间:2023-09-26

我有一段代码如下。

var aMessages = new Array();
aMessages["gender"] = new Array();
aMessages["gender"]["blank"] = new Array();
aMessages["gender"]["blank"]["Default"] = "Please select the gender of the person being registered on the site.";
aMessages["gender"]["blank"]["Self"] = "Please select your gender.";
aMessages["gender"]["blank"]["Son"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Daughter"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Brother"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Sister"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Friend"] = "Please select your friend's gender.";
aMessages["gender"]["blank"]["Relative"] = "Please select your relative's gender.";
aMessages["gender"]["invalid"] = "Please choose relevant gender.";
function displayMessage(field, errorCase){
    console.log(errorCase, field, "here");
    console.log(aMessages[field][errorCase]);
}
err = 'invalid';
displayMessage("gender", err);

所以我将字段和错误案例传递给函数,函数做一些事情,现在让我们假设它打印消息。对于一个级别来说很好,即 gender (field) -> err (errorcase) .但是如何在参数中传递索引的索引。

是否有任何解决方法。还建议任何其他好的选择。

最灵活的方法是使用参数,如以下问题所述:JavaScript 可变数量的参数来函数。

但是,常见的 JavaScript 做法是使用对象文字,以提高可读性,也不必担心参数的顺序。 你可以在jQuery UI API中看到很多这样的例子,比如这个:.effect(选项)。

这是一个开始(jsfiddle):

function displayMessage(field, errorCase) {
    if (typeof errorCase === "string") {
        console.log(errorCase, field, "here");
        console.log(aMessages[field][errorCase]);
    } else {
        // You should ensure the errorCase object literal has these properties before accessing them
        console.log(errorCase.err, field, "there");
        console.log(errorCase.relation, field, "there again");
        console.log(aMessages[field][errorCase.err][errorCase.relation]);
    }
}
displayMessage("gender", {
    err: "blank",
    relation: "Sister"
});

这提供了你想要的东西?

var aMessages = new Array();
aMessages["gender"] = new Array();
aMessages["gender"]["blank"] = new Array();
aMessages["gender"]["blank"]["Default"] = "Please select the gender of the person being registered on the site.";
aMessages["gender"]["blank"]["Self"] = "Please select your gender.";
aMessages["gender"]["blank"]["Son"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Daughter"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Brother"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Sister"] = "Gender of the member is required for registration.";
aMessages["gender"]["blank"]["Friend"] = "Please select your friend's gender.";
aMessages["gender"]["blank"]["Relative"] = "Please select your relative's gender.";
aMessages["gender"]["invalid"] = "Please choose relevant gender.";
function displayMessage(field, errorCase){
    console.log(errorCase, field, "here");
    var argc = arguments.length;
    if(argc >= 3) {
      console.log(aMessages[field][errorCase][arguments[2]]);
    }
    else {
      console.log(aMessages[field][errorCase]);
    }
}
err = 'invalid';
displayMessage("gender", err);
err = 'blank';
displayMessage("gender", err, "Daughter");