gpt4 book ai didi

javascript - 更改数组中的元素位置并在其间移动元素

转载 作者:搜寻专家 更新时间:2023-11-01 04:48:15 24 4
gpt4 key购买 nike

我想选择数组中的一个元素,将其移动到另一个索引,然后将“中间”元素“移动/旋转”1。

想象一个拖放功能,如果索引 from 小于索引 to,那么我想移到左边,否则移到在右边。

输入:

让数据 = [0, 1, 2, 3, 4, 5, 6 ]

任务 1:insertAndShift(data, 0, 3):取索引 0 处的元素,将索引 1、2、3 向左移动,然后在 3 处插入索引 0

预期输出:

[ 1, 2, 3, 0, 4, 5, 6 ]

任务 2:insertAndShift(data, 3, 0) 在索引 3 处获取元素,将索引 0、1、2 向右移动,然后在 0 处插入索引 3

预期输出:

[0、1、2、3、4、5、6]

我试过这个:

正在关注 Rotating an array in place ,丑陋且无效的代码(临时始终未定义+结果不完整+可能仅适用于 RIGHT):

insertAndShift(data, from, to)
{
if(from < to)
{
// rotate in between - LEFT

}
else
{
// swap elements
let temp = data[from];
data[from] = data[to];
data[to] = temp;

// rotate in between - RIGHT
let newData = this.rotate(data.slice(to, from - 1), 1)

let result = [];
result.push(data.slice(0,1));
newData.map((element) => result.push(element))
for(let i = from+1; i < data.length; i++)
{
result.push(data[i]);
}

this.setState({data: result})
}
}

rotate(arr, k) {
var l = arr.length;
arr = this.reverseArr(arr, 0, l - 1);
arr = this.reverseArr(arr, 0, k - 1);
arr = this.reverseArr(arr, k, l - 1);
return arr;
}

reverseArr(arr, left, right) {
while (left < right) {
var temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
return arr;
}

同时关注 Javascript (dynamic) insert into array, then shift all elements underneath +1 ,它只返回 1 个项目:

else
{
let result = data.splice(to, 1, data[from]);
this.setState({allTasksArray: result})
}

我怎样才能同时为左手和右手实现这一点?

最佳答案

您可以使用 Array.prototype.splice剪切出您想要的元素并插入到所需的索引处(移动将自动发生):

function insertAndShift(arr, from, to) {
let cutOut = arr.splice(from, 1) [0]; // cut the element at index 'from'
arr.splice(to, 0, cutOut); // insert it at index 'to'
}



let data = [ 0, 1, 2, 3, 4, 5, 6 ];

insertAndShift(data, 0, 3);
console.log("[" + data + "]");

insertAndShift(data, 3, 0);
console.log("[" + data + "]");

关于javascript - 更改数组中的元素位置并在其间移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com