Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将变量1分配给变量2,将变量2分配给变量3_Javascript_Variables_Optimization - Fatal编程技术网

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

Javascript 将变量1分配给变量2,将变量2分配给变量3,javascript,variables,optimization,Javascript,Variables,Optimization,我有一个数组,我想按照某种模式洗牌 我正在尝试用javascript制作一个rubics立方体。 我要将值2指定给值1,将值1指定给值3,将值3指定给值2。我可以在4行代码内完成这项工作,但有没有更短的方法? 比如: 我知道这样不行,但你们知道这样行吗? 这在循环8个变量时非常有用 谢谢, Tempestas Ludi.为什么不将值放入数组中,并在需要使用不同值时更改索引指针呢?如果要处理两个以上的变量,最好使用数组,因为数组内置了可以使用的函数 不管怎样,关于你的评论。由于要旋转的指针不是预

我有一个数组,我想按照某种模式洗牌 我正在尝试用javascript制作一个rubics立方体。
我要将值2指定给值1,将值1指定给值3,将值3指定给值2。我可以在4行代码内完成这项工作,但有没有更短的方法? 比如:

我知道这样不行,但你们知道这样行吗? 这在循环8个变量时非常有用

谢谢,
Tempestas Ludi.

为什么不将值放入数组中,并在需要使用不同值时更改索引指针呢?

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

不管怎样,关于你的评论。由于要旋转的指针不是预先确定的,而且会有所不同,所以最好使用函数。一个可以在您定义的指针之间进行迭代的函数

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
下面是一个工作示例: 但是,如果您喜欢使用只是数组方法的原型函数,则可以定义一个属性并从那里访问它

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

虽然这将简化他的代码,但这是一个建议,而不是一个解决方案,应该放在评论中而不是代替。这是一个建议的解决方案。他问是否有一种方法可以优化变量的移动,而不必手动定义每次重新分配。你给了他另一种定义变量的方法,这是对这个问题的字面解释。你的答案也不能回答这个问题,所以按照你的教条,应该是一个注释。我可以在4行代码内完成,但有没有一个更短的方法?我给了他一个使用数组的较短方法。我回答的另一个主要部分是对他的评论的回应。如果不是字面意思,你怎么解释这个问题呢?谢谢,但是当我想将数组[0]移动到数组[2],数组[2]移动到数组[8],数组[8]移动到数组[6],数组[6]移动到数组[0],这是旋转立方体一侧的角所必需的,我不能使用它,因为这些索引中没有任何合理的模式。这是我的一点问题。啊,我明白了。我会写另一个解决方案。同时,你应该在你的问题中澄清这一点。谢谢!我已经用旧的scool方法暂时解决了我的问题:一个变量接一个变量,但我认为这是一个更短的方法!谢谢!!!
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);