![](/img/trans.png)
[英]how to get array or start index and end index after zoom on highchart
[英]How to test whether array index is between arbitrary end and start point?
编辑:4 年后,我认为这是我的一个不好问的问题。 我希望它对某人有用,但我认为它是一个很好的删除候选者。 继续加一粒盐。
假设我有一个数组,并且某个函数遍历该数组的一个子数组。 此外,如果子数组包含超出数组末尾的索引,则子数组从数组的第一个索引处恢复。
例如,如果数组长度为 50,并且索引从 0 开始,
48 49 0 1 ...
特别是,我使用 JavaScript 的 Remainder 运算符从头到尾。 array[i%array.length]
。
虽然这让我得到了我想要的连续索引集,但我还想根据索引值进行一些过滤,如果它们超出某个点,我想排除它们。 例如,只保留索引“介于”48 和 1 之间; 包容开始,专属结束。
我一直在做的只是过滤条件,例如item.index >= idx && item.index < end
,但这显然不适用于数组的开头和结尾。
因此,正如标题所述,我如何有效地检查给定索引或索引集是否在这些点之间?
就本题而言,起点是包容的,终点是不包括的。
编辑:为了回应downvotes,我已经澄清了这个问题并添加了几个片段。 为简洁起见,我省略了问题的每个细节。
如果没有其他类型的条件,这将是一个无限循环,但这是如何完成的:
for (var i = 1; someCondition; i++) {
if (i >= array.length - 1) {
i = 1;
}
// some code
}
这样的事情应该工作
function checkPresence(arr, start, stop, value){
if (arr.slice(arr.indexOf(start), arr.indexOf(stop)).indexOf(value) != -1)
return true;
else return false;
}
var tab = [12, 2, 36, 14, 48, 49, 0, 1];
console.log(checkPresence(tab, 48, 1, 49));
建议的答案是正确的方向,但并没有完全实现。 我的问题很难说清楚,所以我不怪他们。
对于未来的访问者,以下是实现我所想的代码。
/* source array */
var source = [];
for (var i = 0; i < 10; i++) {
source.push({ index: i });
}
/* target array */
var target = [];
/* initial index reference in the array; bound between 0 and length-1 */
var index = 0;
/* count of items to be 'displayed', or allocated to the subarray; with index = 0, items 0,1,2,3 will be in the subarray */
var show = 3;
/* init target */
target = source.slice(index,show);
/* specifies count of items to be replaced when updating the subarray */
var increment = 1;
var iterator = [1,2,3,4,5,6,7,8,9];
iterator.forEach(function(item,i) {
slide(increment);
});
console.log('first index should be at index: ' + iterator.length, 'actual index is: ', target[0].index);
console.log('last index should be at index: ' + (iterator.length + show - 1)%source.length, 'actual index is: ', target[target.length-1].index);
function slide(by) {
if (!by) {
by = 1;
}
var len = source.length;
var idx;
if (index + by < 0) {
idx = len - Math.abs(by);
} else if (index + by >= len) {
idx = by;
} else {
idx = index + by;
}
var start = idx + show;
var i;
var j;
for (i = idx, j = 0; i < start; i++, j++) {
var loc = target.indexOf(source[i%len]);
if (loc >= 0) {
target[loc] = { index: null };
}
target[j] = source[i%len];
}
index = (idx) > len ? idx-len : idx;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.