Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何高效地将阵列A转换为阵列B?_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 如何高效地将阵列A转换为阵列B?

Javascript 如何高效地将阵列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;

我试图操纵数组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; 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))