Если вы имеете дело с более чем 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/
Во всяком случае, о ваших комментариях. Видя, как указатели, которые вы будете вращать, не предопределены и будут меняться, вероятно, лучше использовать функцию.
Функция, которая будет проходить через указатели, которые вы определяете.
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);
Вот рабочий пример: http://jsfiddle.net/w2jGr/
Однако, если вы предпочитаете использовать функцию прототипа, который является только метод массива, вы можете определить свойство и просто получить от него доступ.
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
Спасибо! Я временно решил проблему на старом пути: переменная переменной, но я думаю, что это намного короче! Большое спасибо!!! –