如何将数组结果视为数组Javascript

How to treat array result as array Javascript?

本文关键字:数组 Javascript 结果      更新时间:2023-09-26

我想循环我的数组结果作为数组,因为我使用嵌套循环。这是我的代码

var isp = ["yahoo", "gmail"];
var yahoo = ["@yahoo.com", "@rocketmail.com", "@ymail.com"];
var gmail = ["@gmail.com"];
for(x=0;x<isp.length;x++){
    //Should alert 3 Because var yahoo contains 3 element
    //Should alert 1 because var gmail is contain 1 element
    alert(isp[x].length);
    for(y=0;y<isp[x].length;y++){
        //Should alert @yahoo.com, @rocketmail.com and so on
        alert(isp[x][y]);
    }
}

这是我的JSFiddle https://jsfiddle.net/4v272ghL/1/

试试这个:

https://jsfiddle.net/4v272ghL/2/

var isp = ["yahoo", "gmail"];
var providers = {
    'yahoo': ["@yahoo.com", "@rocketmail.com", "@ymail.com"],
    'gmail': ["@gmail.com"]
};
isp.forEach(function(v, i) {
    console.log(v);
    providers[v].forEach(function(domain, index) {
        console.log(domain);
    });
});

你正在使用JS对象来保存域数组。使用它,您可以动态访问每个提供商的数据。

也许你不需要那么多数组?让我们用一个对象来代替。

var isps = {
    yahoo: ["@yahoo.com", "@rocketmail.com", "@ymail.com"],
    gmail: ["@gmail.com"]
};
for(isp in isps) {
    var providers = isps[isp];
  
    document.write(isp + " has " + providers.length + " provider(s):<br/>");
    providers.forEach(function(domain) {
        document.write(domain + "<br/>");
    });
};

这之所以有效,是因为您可以简单地循环遍历对象的键(与第一个数组相同)并使用它来访问该对象的值(与之前的其他变量相同),而不是遍历数组并尝试访问具有相同名称的不同变量。

请注意,我已经将您的alert更改为在运行代码片段时将提供更多信息的东西。当然,一旦您获得了isp, providersdomain这些值,您就可以对它们做任何您喜欢的事情-您不需要document.write它们。

这个方法有几个好处。例如,由于我们只是人类,如果发生这种情况怎么办:

var isp = ["yahoo"];
var yahooo = ["@yahoo.com"];

依赖于isp中的值和变量名完全相同。像上面这样一个简单的错误("yahoo "而不是"yahoo")会阻止代码工作,如果你不知道你在找什么,像这样一个字母的错误可能很难发现。

如果您要经常回来添加或修改这些值,这可能会成为一个问题。使用对象模式,它更干净,更独立。

这个解决方案的一个潜在问题是,如果这些提供者循环的顺序很重要(例如,如果你总是需要在"gmail"之前输出"yahoo")。目前JavaScript对对象的表述如下:"它是一个无序的属性集合"。这可能会在ES6中发生变化(我们目前在ES5上)。在这里阅读更多关于这个特殊问题的信息:JavaScript保证对象属性顺序吗?

您需要对isp[x]进行求值以获得其他两个数组的名称。例如:

var isp = ["yahoo", "gmail"];
var yahoo = ["@yahoo.com", "@rocketmail.com", "@ymail.com"];
var gmail = ["@gmail.com"];
for(x=0;x<isp.length;x++){
    //Should alert 3 Because var yahoo contains 3 element
    //Should alert 1 because var gmail is contain 1 element
    alert(isp[x].length);
    for(y=0;y<eval(isp[x]).length;y++){
        //Should alert @yahoo.com, @rocketmail.com and so on
        alert(eval(isp[x])[y]);
    }
}

这很清楚,我猜对吧?: D

var ispAndData = [
  ["yahoo", ["@yahoo.com", "@rocketmail.com", "@ymail.com"]],
  ["gmail", ["@gmail.com"]]
];
for (x = 0; x < ispAndData.length; x++) {
  //Should alert 3 Because var yahoo contains 3 element
  //Should alert 1 because var gmail is contain 1 element
  document.write(ispAndData[x][0] + " -> ");
  document.write(ispAndData[x][1].length + "</br>");
  for (y = 0; y < ispAndData[x][1].length; y++) {
    //Should alert @yahoo.com, @rocketmail.com and so on
    document.write(ispAndData[x][1][y] + "</br>");
  }
  document.write("</br>");
}