我不是指使用密钥使用for循环。
例如,如果你有一个像:
这样的数组var fruitArray = ["Apples", "Bananas", "Coconuts"],
curFruit = 0;
你可以"迭代"使用按钮,比如说你有一个上一个/下一个按钮,所有这些按钮都会递减/增加curFruit
索引。
所以,如果我在香蕉上,我可以使用prev按钮获取苹果:
fruitArray[0] // Apples
香蕉的指数为1,但prev按钮会使指数下降一个。
所以使用未知长度的对象,而不是使用带编号的索引,你怎么能这样做?
说出来是这样的:
var fruitObject = {"Apples":"Red", "Bananas":"Yellow", "Coconuts":"Brown"};
我意识到你可以设置0,1,2和水果名称,但只是为了表明你不知道对象键/索引可能是什么。
所以如果我在香蕉上使用
fruitObject.Bananas // yellow
我怎样才能使用与数组相同的减量思想来获取Apples?
我的问题与方法中的for
无关我不知道为什么不清楚,这实际上是我问题的第一行。
我认为无论如何我找到了一个解决方案,虽然它可能不是直接/最有效的方式,但我会创建一个临时的本地"查找"。
解释:
这是一个对象
var colorObject = {"red":"apple", "blue":"blueberries", "yellow":"banana"};
我不想使用for in方法从左到右完成。
我希望能够在"blue":"berries"
开始/保持当前位置,我可以跳到"红色":" apple"不知道"red":"apple"
是什么
我当前的解决方案是,是的,虽然具有讽刺意味的是我会使用for in方法但是要创建一个查找数组。
像
这样的东西var tempArray = [];
for (var key in colorObject) {
tempArray.push(key);
}
然后我可以使用递增/递减方法从任何地方开始导航对象。
tempArray[1]
将返回"蓝色"我可以去" red"通过执行tempArray[0]
解释为
colorObject.blue // blueberries
编辑感谢编辑使我的问题更加清晰
我做得很差,所以我就这么说。
答案 0 :(得分:2)
这是不可能的。 JavaScript object properties do not have a defined order,因此在X键之后没有Y键的概念。
Excerpt from EnumerateObjectProperties section of ECMAScript 2017 Draft (ECMA-262)(强调补充):
未指定枚举属性的机制和顺序,但必须符合下面指定的规则。
如果要迭代fruitObject
对象的属性,"Bananas"
可能会或可能不会出现在"Coconuts"
之前,此行为根本不是由规范定义的。每次迭代属性时,似乎都不能保证属性将以相同的顺序返回。
拥有一致顺序的唯一方法是拥有一个数组。或者,您可以通过Object.keys
创建属性数组来完成此操作。
var fruitObject = {"Apples":"Red", "Bananas":"Yellow", "Coconuts":"Brown"};
// Get the property keys in an ordered list:
var fruitObjectKeys = Object.keys(fruitObject);
// An array of properties with a consistent order:
fruitObjectKeys.forEach(function(prop) {
console.log(prop, '=', fruitObject[prop]);
});
但请注意,运行代码的JavaScript引擎将决定生成的属性数组的顺序,如果您这样做的话。
答案 1 :(得分:1)
对象没有顺序,所以你不能说fruitObject
的第一个元素是“苹果”,第二个是“香蕉”,第三个是“Cocounts”。
您可以将密钥作为带Object.keys()
的数组获取,然后执行类似
var keys=Object.keys(fruitObject);
fruitObject[keys[0]];
请记住,在JS中,obj.key
与obj["key"]
相同。