在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]