我有一个数组
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/