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