在javascript对象数组中查找下一个/上一个项目的最佳方法?

在javascript对象数组中查找下一个/上一个项目的最佳方法?,javascript,coffeescript,Javascript,Coffeescript,假设您有一个Javascript页面对象数组: pages = [{uid: 1, title: 'Home'}, {uid: 2, title: 'Products'}, {uid: 3, title: 'About'}, {uid: 4, title: 'Contact'} ] 您的目标是创建一个方法,在给定当前页面的UID的情况下,该方法返回它旁边的UID或它前面的UID(由数组中的顺序定义) (更新)注意:您无权访问当前页面对象,只能访问其UID,因此无法使用indexOf()简单地找

假设您有一个Javascript页面对象数组:

pages = [{uid: 1, title: 'Home'},
{uid: 2, title: 'Products'},
{uid: 3, title: 'About'},
{uid: 4, title: 'Contact'}
]
您的目标是创建一个方法,在给定当前页面的UID的情况下,该方法返回它旁边的UID或它前面的UID(由数组中的顺序定义)

(更新)注意:您无权访问当前页面对象,只能访问其UID,因此无法使用indexOf()简单地找到其位置

在Javascript中,最优雅的方法是什么?这是一个简单的问题,但我为它想到的解决方案并没有设法反映出这种简单性,我相信会有一个

奖金


同样的问题,但咖啡脚本?(不知道我会如何奖励它作为奖金,但希望你会感觉良好)

这是我能想到的最优雅的方式。但是我没有充实错误检查,所以如果没有错误检查,它只返回null

nextPage = function (pages, currentPageUID){
  var i = pages.findIndex(function(p) { return p.uid === currentPageUID; });
  return (i > -1) ? (pages[i + 1] ? pages[i + 1] : null) : null; 
}

previousPage = function (pages, currentPageUID){
  var i = pages.findIndex(function(p) { return p.uid === currentPageUID; });
  return (i > -1) ? (pages[i -1] ? pages[i -1] : null) : null; 
}

你考虑过改变数据结构吗?一个映射,其中键是UUID,值是指向行的指针,或者可能是数字索引。这是数据库索引的概念。如果将该值设为数字索引,则只需加/减即可得到下一个/上一个。如果您有当前值的句柄,则双链接列表数据结构将允许您立即访问上一个和下一个值。
nextPage = function (pages, currentPageUID){
  var i = pages.findIndex(function(p) { return p.uid === currentPageUID; });
  return (i > -1) ? (pages[i + 1] ? pages[i + 1] : null) : null; 
}

previousPage = function (pages, currentPageUID){
  var i = pages.findIndex(function(p) { return p.uid === currentPageUID; });
  return (i > -1) ? (pages[i -1] ? pages[i -1] : null) : null; 
}