我的意思不是使用键来使用 for 循环。
例如,如果您有一个像这样的数组:
var fruitArray = ["Apples", "Bananas", "Coconuts"],
curFruit = 0;
您可以使用按钮“迭代”它,假设您有一个上一个/下一个按钮,所有这些按钮所做的就是递减/递增 curFruit
索引。
因此,如果我使用香蕉,我可以使用上一个按钮获取苹果:
fruitArray[0] // Apples
香蕉的索引为 1,但上一个按钮会将索引降低 1。
那么对于一个未知长度的对象,并且不使用编号索引,你怎么能做到这一点?
说得像这样:
var fruitObject = {"Apples":"Red", "Bananas":"Yellow", "Coconuts":"Brown"};
我意识到您可以设置 0、1、2 和水果名称,但这只是为了表明您不知道对象键/索引可能是什么。
所以如果我吃香蕉
fruitObject.Bananas // yellow
如何使用与数组相同的递减思想来获取苹果?
我的问题不是关于 for in 方法
我不知道为什么这不清楚,这实际上是我问题的第一行。
我想我无论如何都找到了一个解决方案,尽管它可能不是直接/最有效的方法,我将创建一个临时的本地“查找”。
解释一下:
这是一个对象
var colorObject = {"red":"apple", "blue":"blueberries", "yellow":"banana"};
我不想使用 for in 方法从左到右完成。
我希望能够开始/保持当前位置,就像我在 "blue":"berry"
一样,并且我可以跳到 "red":"apple"而无需知道“红色”:“苹果”
是
我当前想到的解决方案是,是的,尽管具有讽刺意味的是,我会使用 for in 方法,但要创建一个查找数组。
类似于
var tempArray = [];
for (var key in colorObject) {
tempArray.push(key);
}
然后我可以使用增量/减量方法从任何地方开始导航对象。
tempArray[1]
将返回“蓝色”,我可以通过执行 tempArray[0]
来返回“红色”,这被解释为
colorObject.blue // blueberries
编辑感谢编辑使我的问题更加清晰
我的措辞不好,所以这是我的责任。
最佳答案
这是不可能的。 JavaScript object properties do not have a defined order ,所以不存在Y键在X键之后的概念。
Excerpt from EnumerateObjectProperties section of ECMAScript 2017 Draft (ECMA-262) (强调):
The mechanics and order of enumerating the properties is not specified but must conform to the rules specified below.
如果您要迭代 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 引擎将决定生成的属性数组的顺序。
关于javascript - 如何像数组一样迭代 JavaScript 对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433956/