通过javascript中的javascript对象迭代以获取正确的密钥

时间:2014-05-12 17:29:04

标签: javascript object

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

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.index不工作?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这是一个示例,说明了如何在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中包含的相匹配。其他两种形式只是寻找名为"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));