在javascript中迭代javascript对象以获得正确的键

在javascript中迭代javascript对象以获得正确的键,javascript,object,Javascript,Object,我有一个第三方函数,它返回一个对象 abc.xyz() --> this returns an object containing many objects,strings,boolean & arrays . Basically JSON style object. 我遍历这个对象,只获取这个对象中的对象&这个对象应该有一个名为“apple”的键。找到该对象后,我将把键放入一个名为“index”的变量中&然后使用该变量“index”获取我想要使用的对象 abc.xyz().

我有一个第三方函数,它返回一个对象

abc.xyz() --> this returns an object containing many objects,strings,boolean & arrays . Basically JSON style 
object. 
我遍历这个对象,只获取这个对象中的对象&这个对象应该有一个名为“apple”的键。找到该对象后,我将把键放入一个名为“index”的变量中&然后使用该变量“index”获取我想要使用的对象

abc.xyz().index//这在理想情况下应该返回一个对象,但这是未定义的。为什么?

下面是我的代码

var pa= abc.xyz();
    var index; 
    for(var key in pa){
        if (pa.hasOwnProperty(key)) {
            var obj = pa[key];

            for(var prop in obj){
                if(obj.hasOwnProperty(prop)){
                    if(typeof obj === 'object'){ 
                        if( prop == "apple"){
                            index = key;
                        }
                    }
                }
            }
         }
    } 

    el.appendChild(ul(pa.index)); // though I get the correct index when i  
        console.log(index) but why is pa.index undefined? 

如果我不使用索引变量&我直接说pa.k,其中k是索引的值,它是有效的。那为什么pa索引不起作用呢

pa.index
查找名为“index”的键


要查找
index
值的键,需要使用
pa[index]
-没有句点,只有括号。

下面的示例演示了javascript中属性访问的两种不同语法的工作原理:

var o = {
  index: 'this is index',
  APPLE: 'this is APPLE'
};
var index = 'APPLE';
console.log(o.index);     // --> this is index
console.log(o[index]);    // --> this is APPLE  *
console.log(o['index']);  // --> this is index
标有
*
的是本例中应该使用的。此表单查找
o
的属性,其名称与变量
索引中包含的值匹配。其他两个表单只查找名为
“index”
的属性。因此,您的示例的最后一行应该是:

el.appendChild(ul(pa[index]));   // assuming that `el` and `ul()` were both
                                 // defined appropriately elsewhere in your 
                                 // script.

还有。。。看来你的逻辑可能被大大简化了。考虑以下事项:

var pa = abc.xyz();
var result; 
for(var key in pa){
  if (pa.hasOwnProperty(key)) {
      var obj = pa[key];
      if(obj.hasOwnProperty("apple")) {
          result = obj;
      }
   }
}
el.appendChild(ul(result));

javascript中没有“json对象”这样的东西。有JS对象,还有json字符串,可以表示JS对象。使用
console.log(abc)
准确地找出OJBEC中的内容。因为
.index
尝试访问
索引
键,就像
.k
尝试访问
k
键一样。对于动态关键点,可以使用
对象[keyVariable]
。另请参见,您似乎在与常量键进行比较-为什么不使用该常量呢?pa.[index]不起作用。即使我直接使用key,它也会给出与第三方方法相同的结果。我还没有定义它。我只是试图访问abc.xyz()对象中的属性
pa[index]
而不是
pa[index]