将变量1分配给变量2,将变量2分配给变量3 javascript

时间:2012-09-02 18:19:05

标签: javascript variables optimization

我有一个阵列,我想根据某种模式对那些进行洗牌 (我正试图在javascript中制作一个rubics多维数据集)。 我想将值2分配给值1,将值1分配给值3,将值3分配给值2.我可以在4行代码中执行此操作,但是有更短的方法吗? 像:

temp = var3; //make temporary variable
(var3 = var2) = var1;//put var2 in var3 and var3 in var1
var1 = temp;//put var3/temp in var1

我知道这种方式不起作用,但你们知道它有效吗? 这在循环8个变量时很有用。

感谢, Tempestas Ludi。

2 个答案:

答案 0 :(得分:0)

为什么不将值放在数组中,只是在想要使用不同的值时更改索引指针?

答案 1 :(得分:0)

如果您处理的变量超过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/