Javascript 如何高效地将阵列A转换为阵列B?
我试图操纵数组A以有效地获得数组B。“k”是一个给定的变量。我提出了下面的逻辑,但我相信应该有更好的方法 数组的长度始终可除以kJavascript 如何高效地将阵列A转换为阵列B?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我试图操纵数组A以有效地获得数组B。“k”是一个给定的变量。我提出了下面的逻辑,但我相信应该有更好的方法 数组的长度始终可除以k 当k改变时,A的给定元素数改变。A的元素数始终为k*4。如果k是2,我们的A数组是[0,1,2,3,4,5,6,7],B数组(结果)应该是B=[6,7,4,5,2,3,0,1] let A = [0,1,2,3,4,5,6,7,8,9,10,11] k = 3 let B = [] for (let i=A.length - (k-1); i >=0;
当k改变时,A的给定元素数改变。A的元素数始终为k*4。如果k是2,我们的A数组是[0,1,2,3,4,5,6,7],B数组(结果)应该是B=[6,7,4,5,2,3,0,1]
let A = [0,1,2,3,4,5,6,7,8,9,10,11]
k = 3
let B = []
for (let i=A.length - (k-1); i >=0; i=i-k) {
if (A.length - 1 <= i + k +1) {
B = [
...B,
...(A.slice(i+1, i+k+1))
]
}
}
B = [
...B,
...(A.slice(0,k))
]
设A=[0,1,2,3,4,5,6,7,8,9,10,11]
k=3
设B=[]
对于(设i=A.length-(k-1);i>=0;i=i-k){
如果(A.length-1也许这就是你想要的
const ar=[0,1,2,3,4,5,6,7,8,9,10,11];
功能重组(ar,k){
对于(var r=[],i=k*~~ar.length/k;i>0;i-=k)
r=r.concat(ar.slice(数学最大值(i-k,0),i));
//或者,或者:
对于(var s=[],i=ar.length-k;i>-k;i-=k)
s=s.concat(ar.slice(数学最大值(i,0),i+k));
console.log(“k:+k+”\n1.版本:+r+”\n2.版本:+s)
}
对于(让j=1;j保持简单:
const A = [0,1,2,3,4,5,6,7,8,9,10,11]
const k = 3
// assuming k >= 1 and A.length % k == 0
const B = []
for (let i=A.length; i>0; i-=k)
B.push(...A.slice(i-k, i))
也许你应该首先让你的代码正常工作,然后通过正确解释转换的逻辑来担心效率。不要只是在代码中暗示“你们去弄清楚我到底想要什么。”为了更好地理解您想要实现的目标,请发布k=1和k=2或k=n的预期结果。我不知道stackoverflow为何如此野蛮:)抱歉,我编辑了这个问题。另外,@Jaromanda,代码按预期运行。这仍然和OPs代码一样低效。我仍处于理解OP的意图的阶段……OP想要一个“更好”的方法来做。我怀疑是否存在比他或我的方法更有效的方法(*)(基本上都是连接子数组)。最后,这是一个品味或可读性的问题。--(*)在我的重组
函数中,我实际上放置了两个版本的连接方法。当然,只需要一个。是的,这是我一直在寻找的。我觉得我的代码不必要地难以阅读。谢谢!
const A = [0,1,2,3,4,5,6,7,8,9,10,11]
const k = 3
// assuming k >= 1 and A.length % k == 0
const B = []
for (let i=A.length; i>0; i-=k)
B.push(...A.slice(i-k, i))