gpt4 book ai didi

javascript - 交错数组元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:39 24 4
gpt4 key购买 nike

interleave 的快速简单实现是什么:

console.log( interleave([1,2,3,4,5,6]      ,2) ); // [1,4,2,5,3,6]
console.log( interleave([1,2,3,4,5,6,7,8] ,2) ); // [1,5,2,6,3,7,4,8]
console.log( interleave([1,2,3,4,5,6] ,3) ); // [1,3,5,2,4,6]
console.log( interleave([1,2,3,4,5,6,7,8,9],3) ); // [1,4,7,2,5,8,3,6,9]

这模拟了将数组分成 n 个相等的部分,然后按顺序将项目从每个部分数组的前面移开。 (n=2 模拟一副纸牌的完美减半和单次洗牌。)

我不太关心当数组中的项目数不能被 n 整除时会发生什么。合理的答案可能会把剩下的东西交织在一起,甚至“平底船”把它们都扔到最后。

最佳答案

function interleave( deck, step ) {
var copyDeck = deck.slice(),
stop = Math.floor(copyDeck.length/step),
newDeck = [];
for (var i=0; i<step; i++) {
for (var j=0; j<stop; j++) {
newDeck[i + (j*step)] = copyDeck.shift();
}
}
if(copyDeck.length>0) {
newDeck = newDeck.concat(copyDeck);
}
return newDeck;
}

它可以用一个计数器而不是 shift() 来完成

function interleave( deck, step ) {
var len = deck.length,
stop = Math.floor(len/step),
newDeck = [],
cnt=0;
for (var i=0; i<step; i++) {
for (var j=0; j<stop; j++) {
newDeck[i + (j*step)] = deck[cnt++];
}
}
if(cnt<len) {
newDeck = newDeck.concat(deck.slice(cnt,len));
}
return newDeck;
}

我们可以使用 ceil 并在用完时退出,而不是将 extras 附加到末尾

function interleave( deck, step ) {
var copyDeck = deck.slice(),
stop = Math.ceil(copyDeck.length/step),
newDeck = [];
for (var i=0; i<step; i++) {
for (var j=0; j<stop && copyDeck.length>0; j++) {
newDeck[i + (j*step)] = copyDeck.shift();
}
}
return newDeck;
}

关于javascript - 交错数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388274/

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