【问题标题】:get prev and next items in array获取数组中的上一个和下一个项目
【发布时间】:2010-03-23 08:25:06
【问题描述】:

我有一个数字数组

var projects = [ 645,629,648 ];

还有一个数字 645

我需要获取下一个(629)和上一个(648)个数字吗?

我可以用 jquery 做吗?

【问题讨论】:

  • 你把你的数字弄混了吗? 648 不是该数组中的前一个数字。使用 for 循环然后在找到所需数字时在索引的每一侧取数字有什么用?
  • @slugster - 是的,它当数组是圆形时的前一个数字!
  • 他很可能正在寻找一种方法来使用某种选择器来做到这一点。
  • @eyalb - 那么你应该在你的描述中这么说。不要指望我们成为读心者,我们中的很多人已经学会了不要对事物做出假设——我从未遇到过数组是循环的情况。明确而准确:)

标签: jquery


【解决方案1】:

您可以使用带有模数的 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];
}

【讨论】:

  • 使用$.inArray()indexOf() 相比有什么优势,在查看提供的文档时我看不到任何不同的行为? (只是好奇,因为我想学习新事物)
  • @Veger - 我猜因为某些浏览器在某些时候不支持indexOf(我不确定是哪个),如果存在,它将在内部使用它,否则它会循环并找到它。
  • 几乎是我想要的,除了行为错误,如果我选择最后一个元素并让它检查 LAST,它会转到数组中的第一个。
【解决方案2】:

我不了解 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() 函数制作非常相似的东西。

【讨论】:

    【解决方案3】:

    之后只需对数组进行一次排序即可使用//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]);
    

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多