如何使用JavaScript在数组中移动元素的位置

时间:2019-08-22 23:06:57

标签: javascript

我正在尝试创建一个函数来移动数组内元素的位置。

例如,我有这个数组:

[1,2,3]-如果我调用该函数,我会得到这个=> [2,3,1]; 如果再次调用该函数,则应具有=> [3,1,2]; 下次应该再次移动,依此类推。 但是,相反,如果我第二次调用该函数,则会再次得到此信息=> [2,3,1];

我该如何使其正常工作?

我知道为什么会这样,每当我调用该函数以相同的顺序接收相同的值时,我就明白了,这就是为什么我建立了另一个数组(移动)以当前顺序接收值的原因,尝试第二次使用该新数组时,我使用if / else语句尝试了该函数,但是没有用;我还构建了另一个函数,将“ move”作为参数传递,并且它起作用了,但是我没有必要为每个动作都使用不同的函数。

p.s。我正在从HTML输入中接收值。

<input id="numero1" value="">
<button onclick="moveLeft()">Move</button>


var n1 = document.getElementById("numero1");

function moveLeft() {
    var str = n1.value;
    var arr = str.split('');
    var move = [];

    console.log(arr);
    arr.splice(0, 3, arr[1], arr[2], arr[0]);
    console.log(arr);

    for (var i = 0; i < arr.length; i++) {
        move.push(arr[i]);
    }

    console.log(move);
    teste(move);
}


function teste(move) {
    console.log(move);
    move.splice(0, 3, move[1], move[2], move[0]);
    console.log(move);
}

2 个答案:

答案 0 :(得分:3)

如果我理解正确,我认为您可以简化一项功能:

const moveLeft = (arr) => arr.push(a.shift());

请注意,此函数将使数组的内容发生变化,但我想您想要的是

const array = [1, 2, 3];

moveLeft(array);
console.log(array)// [2, 3, 1]

moveLeft(array);
console.log(array)// [3, 1, 2]

moveLeft(array);
console.log(array)// [1, 2, 3]

基本上,我们使用push在数组的末尾添加了一个新元素,而我们添加的新元素是方法shift的返回值,该方法从数组中删除了第一个元素并退回。

修改

如果您不想突变原始数组,最快的方法是创建一个浅表副本并将其传递给函数:

 const newArray = array.slice();
 moveLeft(newArray);

 console.log(newArray, array) // [2, 1, 3] [1, 2, 3]

但是,始终返回新数组的可能实现可能是:

 const moveLeft = (arr) => [...arr.slice(1), arr[0]]

仅供将来参考。但是请记住,这里您要创建一个浅表副本(因此需要一个新数组),并从spread运算符返回一个新数组,因此不太理想。仅当您编写永远不允许可变性的API时,它才有用。

编辑2

根据评论,input的值应反映新的顺序,因此,考虑到之前编写的moveLeft函数(第一个修改内容的函数):

<input id="numero1" value="">
<button onclick="inputMoveLeft('numero1')">Move</button>

还有JS:

function inputMoveLeft(id) {
  const input = document.getElementById(id);

 input.value = moveLeft(input.value.split("")).join("");
}

它应该可以为您提供想要的结果。

答案 1 :(得分:0)

发出并移动声音就像您需要的东西:

function rotateLeft(array){
    let first = array.shift()
    array.push(first); // add to end
    return array;
}

function rotateRight(array){
    let last = array.pop()
    array.unshift(last); // add to front
    return array;
}
相关问题