Javascript 在JS对象中查找成员位置

Javascript 在JS对象中查找成员位置,javascript,object,Javascript,Object,在JS对象中查找成员位置的最快方法是什么 假设我有以下目标: var myObject = { "apple": { "color" : "green", "shape" : "round" }, "banana": { "color" : "yellow", "shape" : "long" }, "orange": { "color" : "orange", "shape" : "round" }, "kiwi": { "color" : "green", "

在JS对象中查找成员位置的最快方法是什么

假设我有以下目标:

var myObject = {
    "apple": { "color" : "green", "shape" : "round" },
    "banana": { "color" : "yellow", "shape" : "long" },
    "orange": { "color" : "orange", "shape" : "round" },
    "kiwi": { "color" : "green", "shape" : "round" }
}
现在,如果我想知道香蕉(即2)的位置,我需要通过对象循环还是有更快的方法

更新:

感谢大家,我现在明白了在一个对象中没有“顺序”的概念,我也无法可靠地找到一个成员的位置。我也不可能找到下一个或上一个成员。这一切都很有道理

因此,我解决问题的方法是:我在数组中循环,并将密钥提供给一个数组,我可以使用该数组跟踪对象中的成员

var fruits = new Array();
for (var key in myObject) {
    fruits.push(key);
}
从技术上讲,“香蕉”没有固定的位置。您正在使用一个JavaScript对象来存储数据,这并不保证任何顺序。如果顺序很重要,则应将内容存储在数组中。您必须执行以下操作:

var myObjectArray = [
    { 'key' : 'apple', 'value' : { 'color' : 'green', 'shape' : 'round' } },
    { 'key' : 'banana', 'value' : { 'color' : 'yellow', 'shape' : 'long' } },
    { 'key' : 'orange', 'value' : { 'color' : 'orange', 'shape' : 'round' } },
    { 'key' : 'kiwi', 'value' : { 'color' : 'green', 'shape' : 'round' } }
]
然后获取索引:

var i;
for(i = 0; i < myObjectArray.length; i++){
    if(myObjectArray[i].key === 'banana'){
        return i;
    }
}
vari;
对于(i=0;i
JavaScript中的对象没有排序。一旦你得到这些数据,你到底想做什么?因为如果您在对象中查找第二个值,您可能不会总是得到相同的结果。

您不应该依赖具有强顺序的对象键。规范并不能保证这一点,例如,以前的一些Chrome版本并没有坚持订购

根据您的用例,您可以存储索引,也可以保留一个数组

var myObject = { 
   apple: { index:0, color:"green" ...

var myKeys = ["apple", "banana", ... ]
var myObject = ...
我是这样做的

var position = Object.keys(myObject).indexOf('banana');

也许这对其他人有帮助…

这被称为“对象”,JavaScript没有“关联数组”。@Rocket我更改了答案以避免混淆,但我讨厌语义上的区别。推广这一区别的一篇“被认为是有害的文章”是一堆废话,归结起来是“不要使用for/in循环,因为原型可以修改”和“使用新数组()没有意义”哈?这是一个区别,因为对象和数组是两个完全不同的东西
{a:b}
不是数组,可以像使用
[]
一样访问它<在中为…编码是不好的,因为如果我执行
Object.prototype.test=3
(这就是为什么应该使用
hasOwnProperty
)<代码>新数组可以,但是
[]
更好(而且可能更快)。关联数组和数组也是两种完全不同的东西。因此,“语义学”。我刚刚意识到你来自PHP的土地,在那里他们显然是一样的东西。抱歉,这会引起一些混乱。我完全同意那篇文章的两个原则。但是“for/in”通常是不好的,除非你特别检查hasownproperty,因为只需要一些傻瓜修改Object.prototype就可以再次破坏你的代码。我只是不想让你把别人读这篇文章和“错误”的术语混淆起来。谢谢,这是有道理的。。。我真的不在乎顺序,我只想找到对象中的上一个和下一个成员。我可以假设成员在该对象的生命周期内保持相同的顺序吗?因为我不在乎下次创建对象时的顺序是否不同,只要我能找出哪个在特定成员之前和之后。对象没有顺序,所以“上一个”和“下一个”在这里没有意义。我建议使用一个数组(对象),这样可以很容易地获得它们的顺序。感谢您的详细解释。遗憾的是,我被我得到的对象的格式所困扰,无法将其更改为数组:(@Steve-您可以随时编写自己的翻译,以生成具有所需格式的新对象。