【问题标题】:How to access elements inside nested objects in a Javascript loop using variable names?如何使用变量名访问 Javascript 循环中嵌套对象内的元素?
【发布时间】:2013-01-23 08:58:58
【问题描述】:

我一无所知。我有一个这样的 JSON 字符串,我需要检查提供的“属性”(以下示例中的postsome):

var index_file =
[{
 "indexAB":[
    { "postsome": ["keyword_abc", "keyword_def"] },
    { "testsome": ["keyword_111", "keyword_222"] }
  ]
},{
 "index_random": [
    { "postsome": ["keyword_abc"] }
  ]
}]

里面有n 对象的任意数量的索引(“indexAB”、“index_random”)。

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

所以:

for (var i = 0, l = indices.length; i < l; i += 1) {

        doc._id = "postsome",
        index_name = "indexAB";

    indices[i]["indexAB"];             // ok, returns object on correct iteration
    indices[i][index_name];            // undefined
    indices[i].indexAB[0][doc._id]     // ok, returns undefined or keywords
    indices[i][index_name][0][doc._id] // undefined 
}

问题:
如何使用变量名index_name 访问循环中的嵌套对象?

【问题讨论】:

  • 您的代码无效。你不能写var foo.bar = ...;。摆脱var 看看是否有帮助。
  • indices[i]["indexAB"]indices[i][index_name] 应该总是产生相同的结果,因为 index_name 的值确实是 "indexAB"。如果你的代码中确实有 Blender 指出的错误,那么你不应该是这些行中的任何一行。
  • 请原谅。跳过var,将参数doc._id传入函数中。

标签: javascript jquery arrays object nested


【解决方案1】:

这不是您问题的直接答案,但我相信它实际上可能对您有所帮助,而不是为您提供一种访问对象中值的复杂方法。

如果不是这个 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"

见:DEMO

我认为你应该改变的是你的数据模型,因为目前它与 JSON 的想法相去甚远,而且总是很难访问其中的数据。

【讨论】:

    【解决方案2】:

    几个问题

    • “indexAB”只存在于数组的第一个元素上
    • 变量名中不能有点。

    我建议您在进一步推迟它之前测试 indexAB 是否是对象的属性。请参见下面的示例:

    固定

    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 
        }
    }
    

    【讨论】:

      【解决方案3】:

      index_nameundefined 因为之前的行会引发错误

      doc._id = "postname" // this causes an error

      只用一个简单的字符串

      doc = "postname"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多