Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用变量名访问Javascript循环中嵌套对象内的元素?_Javascript_Jquery_Arrays_Object_Nested - Fatal编程技术网

如何使用变量名访问Javascript循环中嵌套对象内的元素?

如何使用变量名访问Javascript循环中嵌套对象内的元素?,javascript,jquery,arrays,object,nested,Javascript,Jquery,Arrays,Object,Nested,我不懂。我有一个类似这样的JSON字符串,我需要检查提供的“属性”(postsome,在下面的示例中): 可以有任意数量的索引(“indexAB”、“index_random”),其中包含n对象 我需要“查找”我的属性postsome,但我无法让它工作,因为我正在努力寻找访问对象的正确方法 因此: for(变量i=0,l=index.length;i

我不懂。我有一个类似这样的JSON字符串,我需要检查提供的“属性”(
postsome
,在下面的示例中):

可以有任意数量的索引(“indexAB”、“index_random”),其中包含
n
对象

我需要“查找”我的属性
postsome
,但我无法让它工作,因为我正在努力寻找访问对象的正确方法

因此:

for(变量i=0,l=index.length;i
问题:

如何使用变量名
index\u name
访问循环中的嵌套对象

index\u name
未定义的
,因为前面的行会引发错误

doc.\u id=“postname”//这会导致错误

只需使用一个简单的字符串

doc = "postname"

这并不是对你的问题的直接回答,但我相信它实际上可能比给你一个复杂的方法来访问对象中的值更有帮助

如果不是此JSON对象,而是:

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}];
您将拥有更简单的数据结构:

var index_file =
{
  "indexAB": {
    "postsome": ["keyword_abc", "keyword_def"],
    "testsome": ["keyword_111", "keyword_222"]
  },
  "index_random": {
    "postsome": ["keyword_abc"]
  }
};
这样,只需使用以下工具,就更容易访问:

var value = index_file.indexAB.postsome[0]; // no loops, no nothing
//  value == "keyword_abc"
见:

我认为您应该改变的是您的数据模型,因为目前它与JSON的概念相去甚远,访问其中的数据总是非常困难。

有几个问题

  • “indexAB”仅存在于数组中的第一个元素上
  • 变量名内不能有点
我建议您在进一步推迟之前测试indexAB是否是对象的属性。见下例:

固定的

var index=index\u文件;
对于(变量i=0,l=index.length;i
您的代码无效。不能编写
var foo.bar=。去掉
var
,看看这是否有帮助。
索引[i][“indexAB”]
索引[i][index\u name]
应该总是产生相同的结果,因为
索引\u name
的值实际上是
“indexAB”
。如果您的代码中确实有Blender指出的错误,那么您不应该是这些行中的任何一行。请原谅。跳过
var
,参数
doc.\u id
被传递到函数中。
var index_file =
{
  "indexAB": {
    "postsome": ["keyword_abc", "keyword_def"],
    "testsome": ["keyword_111", "keyword_222"]
  },
  "index_random": {
    "postsome": ["keyword_abc"]
  }
};
var value = index_file.indexAB.postsome[0]; // no loops, no nothing
//  value == "keyword_abc"
var indices = index_file;
for (var i = 0, l = indices.length; i < l; i++) {

    var doc_id = "postsome";
    var index_name = "indexAB";

    indices[i]["indexAB"];             // ok, returns object on correct iteration
    indices[i][index_name];            // undefined
    if ("indexAB" in indices[i]) {
      indices[i].indexAB[0][doc_id]     // ok, returns undefined or keywords
      indices[i][index_name][0][doc_id] // undefined 
    }
}