2015-06-06 35 views
1

我想循環我的數組結果作爲數組,因爲我使用嵌套循環。 這裏是我的代碼如何將數組結果作爲數組使用Javascript?

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/

+3

你的變量'isp'不包含數組,而只是簡單的字符串。 – CBroe

+0

@CBroe那麼,我可以怎麼做,因爲我想要哥哥? –

+0

你想要'isp'可能的結構嗎? –

回答

2

試試這個:

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對象來保存域的數組來代替。使用這個,你可以動態訪問每個提供者的數據。

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」之前)。目前,JavaScript在對象中聲明如下:「它是屬性的無序集合」。這可能會在ES6中發生變化(我們目前在ES5上)。在這裏閱讀關於這個特定問題的更多信息: Does JavaScript Guarantee Object Property Order?

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]); 
    } 
} 
+0

請注意,使用'eval'通常是一個壞主意:http://stackoverflow.com/a/86580/4533609 – Scheda

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>"); 
 
}

相關問題