首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量1赋给变量2,将变量2赋给变量3 javascript

将变量1赋给变量2,将变量2赋给变量3 javascript
EN

Stack Overflow用户
提问于 2012-09-03 02:19:05
回答 2查看 245关注 0票数 1

我有一个数组,我想按照某种模式对它们进行混洗(我正在尝试用javascript创建一个rubics立方体)。我想把value2赋值给值1,赋值1赋值3,赋值3赋值2。我可以在4行代码中做到这一点,但是有没有更短的方法呢?像这样:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-03 02:28:37

如果要处理2个以上的变量,最好使用数组,因为数组内置了可以使用的函数

代码语言:javascript
复制
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/

无论如何,,关于你的评论。由于您要旋转的指针不是预先确定的,并且会有所不同,因此最好使用函数。

将遍历您定义的指针的函数。

代码语言:javascript
复制
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

您可以使用以下命令执行此函数

代码语言:javascript
复制
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/

但是,如果你更喜欢使用一个原型函数,它只是一个数组的方法,你可以定义一个属性并从那里访问它。

代码语言:javascript
复制
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});

永远不建议修改对象的原型,但是如果你不想要干净的代码,并且想要可用性或可读性,这很好用,因为你可以用

代码语言:javascript
复制
nums.rotate([pointers],dir);

http://jsfiddle.net/w2jGr/1/

票数 0
EN

Stack Overflow用户

发布于 2012-09-03 02:20:30

为什么不把你的值放在一个数组中,当你想使用不同的值时,只要改变索引指针就行了?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12238535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档