Javascript 在特定索引后洗牌数组

Javascript 在特定索引后洗牌数组,javascript,Javascript,我知道在ES6中洗牌数组的正确方法如下: function shuffle(a) { for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; } return a; } 但是,如果我想在特定索引之后洗牌数组,我会怎么做(即只洗牌从索引2到最后一个索引的项目)

我知道在ES6中洗牌数组的正确方法如下:

function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

但是,如果我想在特定索引之后洗牌数组,我会怎么做(即只洗牌从索引2到最后一个索引的项目)。

我不知道这是否是您想要的,但我认为它可以工作

函数洗牌(a){
对于(设i=a.length-1;i>0;i--){
常数j=数学楼层(数学随机()*(i+1));
[a[i],a[j]=[a[j],a[i]];
}
返回a;
}
函数shuffleAfter(a,索引=0){
const left=a.slice(0,索引+1);
const right=a.slice(索引+1);
返回[…左,…洗牌(右)];
}
log(shuffleAfter([0,1,2,0]);
log(shuffleAfter([0,1,2,3,1]);
log(shuffleAfter([0,1,2,3,4,2]);

log(shuffleAfter([0,1,2,3,4,5,3])
您可以创建一个
shufflearlay
函数,该函数接受:

  • 阵列
  • 起始索引(默认值:0)
函数shufflearlay(数组,起始索引=0){
对于(让currentIndex=startingIndex;currentIndex使用您的方法:

函数洗牌(a){
对于(设i=a.length-1;i>0;i--){
常数j=数学楼层(数学随机()*(i+1));
[a[i],a[j]=[a[j],a[i]];
}
返回a;
}
常量arr=[0,1,2,3,4,5,6,7,8,9]
常数位置=2
常量shuffled=[…arr.slice(0,位置),…shuffle(arr.slice(位置))]
console.log(`[${arr.toString()}]==>[${shuffled.toString()}]`)
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

function shuffleFromIndex(a, index) {
    let arr = a.slice(index);
    let baseArr = a.slice(0, index);
    return [...baseArr, ...shuffle(arr)]
}