如果您正在處理超過2個變量,它總是最好使用一個數組,因爲數組已經內置函數可以使用
var nums = [1,2,3]; // this is your array. it can have any length you want
// this is one line that does the magic
nums.push(nums.shift()); // to the left
nums.unshift(nums.pop()); // to the right
http://jsfiddle.net/wbKYY/2/
http://jsfiddle.net/wbKYY/4/
不管怎麼說,關於您的評論。看到你將要旋轉的指針不是預先確定的,而且會有所不同,最好使用一個函數。
將通過您定義的指針迭代的函數。 http://jsfiddle.net/w2jGr/
不過,如果你喜歡使用的原型功能,這只是一個數組的方法,您可以:
function rotateArr(arr,pointers,dir) {
var narr = arr; // create a local copy we can use it
var savevalue;
if (dir == 1) { // rotate to the right
savevalue = narr[pointers[pointers.length-1]]; // save the last value
for(var i=pointers.length-2;i>=0;i--) {
narr[pointers[i+1]] = narr[pointers[i]];
}
narr[pointers[0]] = savevalue; // set the first value
} else { // rotate to the left
savevalue = narr[pointers[0]]; // save the first value
for(var i=0;i<pointers.length-1;i++) {
narr[pointers[i]] = narr[pointers[i+1]];
}
narr[pointers[pointers.length-1]] = savevalue; // set the last value
}
return narr;
}
// arr is the array of faces
// pointers is the elements which you want to rotate (an array)
// dir is either 1 or -1
你可以用
nums = rotateArr(nums,[pointers],[1,-1]);
// just some examples
nums = rotateArr(nums,[0,1,2,5],1);
nums = rotateArr(nums,[3,6,1,4],-1);
這裏的工作示例執行該功能定義一個屬性並從那裏訪問它。
Object.defineProperty(Object.prototype, "rotateArr", { value: function(pointers,dir) {
var savevalue;
if (dir == 1) { // rotate to the right
savevalue = this[pointers[pointers.length-1]]; // save the last value
for(var i=pointers.length-2;i>=0;i--) {
this[pointers[i+1]] = this[pointers[i]];
}
this[pointers[0]] = savevalue;
} else { // rotate to the left
savevalue = this[pointers[0]]; // save the last value
for(var i=0;i<pointers.length-1;i++) {
this[pointers[i]] = this[pointers[i+1]];
}
this[pointers[pointers.length-1]] = savevalue;
}
}, enumerable : false});
修改一個對象的原型是從來沒有建議,但如果你不打算對乾淨的代碼,並希望可用性和可讀性,這個偉大的工程,你可以調用函數與
nums.rotate([pointers],dir);
http://jsfiddle.net/w2jGr/1/
謝謝,但是當我想移動數組[0]數組[2],數組[2]數組[8],數組[8]數組[6]和數組[6]數組[0],其中是旋轉立方體的一側的角落所必需的,我不能使用它,因爲這些索引中沒有任何明顯的模式。這有點我的問題。 –
啊我明白了。我會寫出另一個解決方案。同時,你應該在你的問題中澄清這一點。 – Overcode
謝謝!我用舊的scool方式暫時解決了我的問題:由變量變量,但我認爲這是一個更短的問題!非常感謝!!! –