请考虑以下事项:
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)?
感谢
答案 0 :(得分:4)
使用
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;
答案 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] };
}
}