【问题标题】:How to shift values inside array in javascript如何在javascript中移动数组内的值
【发布时间】:2023-03-30 23:47:01
【问题描述】:

我有一个包含元素的数组。 例如 - 让数据 = [ 1, 2, 3, 4, 5 ];

现在如果我在函数中传递 2 作为参数,那么最后两个值将移动到数组中的第一个。

 let data = [1, 2, 3, 4, 5];
 functionname(data, 2);
 //Expected output - 4,5,1,2,3

现在如果我在函数中传递 3 作为参数,那么最后三个值将移动到数组中的第一个。

  let data = [ 1, 2, 3, 4, 5 ];
    functionname(data, 3);
    //Expected output - 3,4,5,1,2

【问题讨论】:

  • 你的代码有什么问题?
  • @FelixKling 问题是,当前代码没有给出预期的输出。
  • 顺便说一句,您的函数中有 3 个参数,而您的调用中只给出了 2 个。
  • 为什么你期望第一次调用将两个值(45)移到前面?
  • 即使更新了要求,第二次调用的预期输出也是错误的。将 4,5,1,2,3 的最后 3 个值移到前面将得到 1,2,3,4,5

标签: javascript


【解决方案1】:

不可变

function insertAndShift(arr, from) {
    return [...arr.slice(-from), ...arr.slice(0, arr.length - from)];
}
insertAndShift([1,2,3,4,5], 2) // [4, 5, 1, 2, 3]
insertAndShift([1,2,3,4,5], 3); // [3, 4, 5, 1, 2]

【讨论】:

  • 不错。但是,为我的回答辩护 - 如果您检查此问题的历史记录,您会发现它看起来需要可变性。
【解决方案2】:

function insertAndShift(data, len) 
{
    let cutOut = data.splice(-len);         // cut <len> elements from the end
    data.splice(0, 0, ...cutOut);           // insert it at index 0
}
    
let data = [1,2,3,4,5];
insertAndShift(data, 2);
console.log(data);

data = [1,2,3,4,5];
insertAndShift(data, 3);
console.log(data);

【讨论】:

    【解决方案3】:

    你来了

    function insertAndShift(arr, from) {
            let cutOut = arr.splice(arr.length - from, arr.length); 
            arr.splice(0, 0, ...cutOut);            
        }
        
    let data = [ 1, 2, 3, 4, 5];
    
    insertAndShift(data, 2)
    console.log(data)
    
    data = [ 1, 2, 3, 4, 5];
    insertAndShift(data, 3)
    console.log(data)

    【讨论】:

    • splice 方法的第二个参数是要剪切的元素的数量,而不是最后一个索引
    • @l00k 已修复。所以它会将最后一个 from 值的数量削减并转移到开头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2021-05-30
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2013-05-08
    相关资源
    最近更新 更多