Jan 07
Javascript 提供了 For ... In ... ,我用的還蠻高興的(雖然我很少撰寫 Javascript)。
今天遇到某種特殊需求,我才發現這個迴圈語法並非萬能。
從 array 裡隨機挑出不重複的值有兩種情況,一種很單純,For ... In ... 迴圈可以處理的很好:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x;
while(fruits.length > 0) {
var r = Math.floor( Math.random() * fruits.length );
var n = fruits[r];
document.write("Choosen[" + r + "]: " + n + "<br />");
document.write("Array: " + fruits + "<br />");
for(x in fruits) {
if (fruits[x] == n) {
fruits.splice(x, 1);
}
}
}
若是 array 裡面已經存在重複的值,而且 array 的資料的來源不方便控制(例如是 HTML 裡面的 li 物件),For ... In ... 這種方便的迴圈語法就必須放棄,改用傳統的 for 迴圈:
var fruits = ["Banana", "Banana", "Orange", "Orange", "Banana", "Apple", "Apple", "Orange", "Mango"];
var i=0;
while(fruits.length > 0) {
var r = Math.floor( Math.random() * fruits.length );
var n = fruits[r];
document.write("Choosen[" + r + "]: " + n + "<br />");
document.write("Array: " + fruits + "<br />");
for(i=0; i<fruits.length; i++) {
if (fruits[i] == n) {
fruits.splice(i, 1);
i--;
}
}
}
Related posts:
Tags: array , For loop , Javascript , random(Visited 2020 times)





January 7th, 2010 at 5:53 pm
js裡有foreach可以用
Joe Horn Reply:
January 8th, 2010 at 2:54 am
我最常用的參考文件是 w3schools,可是我沒看到。
Google 搜尋 Javascript foreach,看到的也幾乎都是文中提到的 For ... In ... 。
From
Using
January 8th, 2010 at 10:12 am
var r = Math.floor( Math.random() * (fruits.length - 1) );
這行應該是
var r = Math.floor( Math.random() * fruits.length );
如果 "減一" 那麼 Array 裡面的最後一個只有在最後的時候才取的到....
Joe Horn Reply:
January 8th, 2010 at 8:46 pm
已修正,謝謝您的指正。
From
Using