javascript - 从圆形数组中采样(indexA 到indexB)

标签 javascript arrays

我有一个数组

var a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];

我使用这个数组的方式是它的开始就是它的结束,如下所示:

             0
        1        15
     2              14
    3                13
   4                  12
    5                11
     6              10
        7         9
             8

http://en.wikipedia.org/wiki/Circular_buffer

数组长度也是一个更长的数字

我想从中获取样本,例如从一个索引到另一个索引,每次都获取n 个项目倒数。

因此,如果您想要获取的索引是 2,并且 n 是 3,您将得到

a[0],a[1],a[2] // 0,1,2

可能用切片完成,或者可能更好地通过循环收集它们..

但是如果我想要的索引是 1 或 0 那么如果 n 可以随时更改,我将如何获得最后部分

有什么简单的方法可以做到这一点?


var a=[0,1,2,3,4,5,6,7,8,9,10];

var index=1;

var n=4;

var i=[n,0];

var b=[];

while(i[0]--){

    b.unshift(
        a[index-i[1]]!==undefined?a[index-i[1]]:a[a.length-Math.abs(index-i[1])]
        );

    i[1]+=1;

    }

console.log(b);  // [9, 10, 0, 1] 

最佳答案

我会用 .slice() 这样来实现:

var a = [0,1,2,3,4,5,6,7,8,9,10];

function getFromCircArr(arr, i, n) {
    var d = i + 1 - n;
    return d < 0 ?  arr.slice(d).concat(arr.slice(0, i + 1)) : arr.slice(d, i + 1);
};

getFromCircArr(a, 2, 3); // --> [0, 1, 2]
getFromCircArr(a, 1, 4); // --> [9, 10, 0, 1]

关于javascript - 从圆形数组中采样(indexA 到indexB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674695/

相关文章:

java - 将带有数组参数的方法传递给驱动程序/测试文件?

ios - For循环以随机顺序追加数组

javascript - 模块模式中带有下划线的 Javascript “private” 变量名是否会与 underscore.js 冲突

javascript - 如何使用类名遍历每个元素

JavaScript:当 `condition` 或 `ternary` 语句的 `if` 部分不包括 `===` 或 `>=`

javascript - 当我点击 iframe 内的图像时播放视频

php - 获取错误 undefined offset : 1

c++ - 如何在C++中快速创建数组

javascript - Bootbox meteor 形式: preventing blank submissions

javascript - 从列表 Javascript 中动态删除项目