获取Javascript对象中的一组键(循环)中的下一个键

时间:2017-01-08 00:16:10

标签: javascript

请考虑以下事项:

var obj = {a:1, b:2, c:3, d:4, e:5, f:6};

请注意,这不是一个数组(除非它在JS中,并且有一种方法可以映射它们)

我现在要求获得下一把钥匙,给一把钥匙。它也需要是“循环的”。因此findNext('c')应为d,而findNext('f')应为a

以下是我提出的建议:

var obj = {a:1, b:2, c:3, d:4, e:5, f:6};
console.log ( findNext('e',obj), " is after e" );
console.log ( findNext('f',obj), " is after f" );
console.log ( findNext('a',obj), " is after a" );



function findNext (key,obj)
{
   var size = Object.keys(obj).length;
   var i;
   for (i=0; i<size; i++)
   {
      if (Object.keys(obj)[i] == key)
      break;
   }
   i = (i + 1) % size;
   return Object.keys(obj)[i];
   
}

有没有更好的方法来实现这一点,因为所有键都是哈希?我可以避免不必迭代直到X找到下一个(X)?

感谢

2 个答案:

答案 0 :(得分:4)

使用

&#13;
&#13;
function findNext(key, obj) {
  var keys = Object.keys(obj);

  console.log(
    keys[(keys.indexOf(key) + 1) % keys.length]
  );
}

var obj = {a:1, b:2, c:3, d:4, e:5, f:6};

findNext('a', obj); // b
findNext('c', obj); // d
findNext('f', obj); // a
&#13;
&#13;
&#13;

答案 1 :(得分:2)

这个怎么样,虽然您需要处理else,但我也在使用es6,但您可以粘贴babel.io以获取es5输出< / p>

let obj = {a:1, b:2, c:3, d:4, e:5, f:6};

const findNext = (key, obj) => {
  const keys = Object.keys(obj);
  const len = Object.keys(obj).length;

  if (keys.indexOf(key) > -1) {
     const nextIndex = (keys.indexOf(key) + 1) % len;
     var next = keys[nextIndex];
     return { [next]: obj[next] };
  }
}