2010-03-23 62 views
13

prev和next项目我有数字得到阵列

var projects = [ 645,629,648 ]; 

的阵列和数量645

我需要得到下一个(629)和prev(648)号码?

我可以用jquery吗?

+0

也许帮助: http://stackoverflow.com/questions/1058185/get-next-and-previous-elements-in-javascript-array – 2010-03-23 08:30:24

+0

你有混合你的号码吗? 648不是该阵列中的前一个数字。什么是使用for循环,然后在找到所需的数字时,在索引的每一边取数字? – slugster 2010-03-23 08:30:59

+1

@slugster - 是的*它是*数组是循环的前一个数字! – Veger 2010-03-23 08:47:13

回答

42

可以使它有点短的整体使用jQuery的$.inArray() method与模量:

var p = [ 645,629,648 ]; 
var start = 645; 
var next = p[($.inArray(start, p) + 1) % p.length]; 
var prev = p[($.inArray(start, p) - 1 + p.length) % p.length]; 

或者,基于功能:

function nextProject(num) { 
    return p[($.inArray(num, p) + 1) % p.length]; 
} 
function prevProject(num) { 
    return p[($.inArray(num, p) - 1 + p.length) % p.length]; 
} 
+0

与'indexOf()'相比,使用'$ .inArray()'有什么优势,在查看提供的文档时看不到任何不同的行为? (只是好奇,因为我想学习新的东西) – Veger 2010-03-23 15:25:05

+2

@Veger - 我猜想,因为某些浏览器在某个时候不支持'indexOf'(我不确定哪个),它会在内部使用它,如果存在的话,否则它会循环并找到它。 – 2010-03-23 15:40:25

+0

几乎我想要的,除了行为是错误的,如果我选择最后一个元素,并让它检查最后,它会先到数组中。 – HenryW 2016-06-11 16:51:13

4

我不知道jQuery的,但它是相当简单的创建你自己的东西(假设你的数组中始终唯一编号):

var projects = [ 645,629,648 ]; 

function next(number) 
{ 
    var index = projects.indexOf(number); 
    index++; 
    if(index >= projects.length) 
     index = 0; 

    return projects[index]; 
} 

调用next()与项目数返回下一个项目编号。可以为prev()功能制作非常类似的东西。

2

你只需要数组,一旦事后进行排序,你可以只使用代码//start

开始。如果号码不存在,没有什么是输出

var projects = [ 645, 629, 648 ], number = 645, i = -1; 
projects.sort(function(a, b) { 
    return a > b ? 1 : -1; 
}); 
//start 
i = projects.indexOf(number); 
if(i > 0) 
    alert(projects[i-1]); 
if(i < (projects.length - 1) && i >= 0) 
    alert(projects[i+1]);