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

时间:2015-06-06 01:08:45

标签: javascript arrays

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

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/

4 个答案:

答案 0 :(得分:2)

试试这个:

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

.link-list {
  position: fixed;
  right: 0px;
  bottom: 0;
  top: 0;
  width: 16em;
  perspective: 180em;
  background: pink;
  z-index: 10;
}

.sub {
  z-index: 2;
  width: 100%;
  height: 100%;
  background: dimgrey;
  transition: .6s;
  position: fixed;
  top: 0;
  bottom: 0;
  right: 16em;
  overflow: auto;
  transform-origin: 100% 100% 0;
  transform: rotateY(-180deg);
}

.link-list:hover .sub {
  transform-origin: 100% 100% 0;
  transform: rotateY(0deg);
  position: fixed;
  right: 16em;
  -webkit-transition: all .6s ease-in-out;
  -moz-transition: all .6s ease-in-out;
  -o-transition: all .6s ease-in-out;
  transition: all .6s ease-in-out;
}

h1 {
  background: salmon;
  z-index: 99;
}

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

答案 1 :(得分:2)

也许你不需要这么多阵列?让我们改用对象。

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更改为在运行代码段时提供更多信息的内容。当然,一旦您有权访问这些值ispprovidersdomain,您就可以随心所欲地执行任何操作 - 您不需要document.write它们。

这种方法有一些好处。例如,因为我们只是人类,如果发生这种情况会怎么样:

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

isp中的值存在依赖关系,变量名称完全相同。像上面这样的简单错误(“yahooo”而不是“yahoo”)会阻止代码工作,如果你不知道你在寻找什么,那么像这样的单字母错误就很难找到。

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

此解决方案的一个潜在问题是,如果这些提供商循环的顺序很重要(即,如果您在“gmail”之前总是需要“yahoo”输出)。目前,JavaScript在对象方面声明如下:“它是一个无序的属性集合”。这可能会在ES6中发生变化(我们目前在ES5上)。在此处阅读有关此特定问题的更多信 Does JavaScript Guarantee Object Property Order?

答案 2 :(得分:1)

这是明确的,我猜对了吗? :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>");
}

答案 3 :(得分:0)

您需要评估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]);
    }
}