我想循环我的数组结果作为数组因为我使用嵌套循环。 这是我的代码
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/
答案 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
更改为在运行代码段时提供更多信息的内容。当然,一旦您有权访问这些值isp
,providers
和domain
,您就可以随心所欲地执行任何操作 - 您不需要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]);
}
}