【问题标题】:Get object listed in an array获取数组中列出的对象
【发布时间】:2015-02-05 19:49:16
【问题描述】:

我在获取数组中的对象时遇到问题。 就我而言,我有一个带有对象及其 ID 的 JSON 文件。我想通过查找对象的 ID 来获取对象。所以我想得到 Objekt(101 和 103)以进行进一步计算。 (在 C++ 中它将是一个 map ,然后迭代直到找到 101 并返回。)在 Javascript 中我得到了那个错误: “类型错误:区域 [i] [103] 未定义”。我不知道出了什么问题。或者有没有更好的方法通过它的 id 来获取一个对象?

这是一个代码示例:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<title>Unbenanntes Dokument</title>
</head>

<body>

<div id="results"></div>

<script>
var region = [
  {
  "101": {
    "id":101,
    "name":"Eisenstadt(Stadt)",
    "pop":13485,
    "lat":47.845876,
    "lng":16.518073,
    "FIELD6":"",
    "FIELD7":"" }
  },
  {
  "102": {
    "id":102,
    "name":"Rust(Stadt)",
    "pop":1942,
    "lat":47.803858,
    "lng":16.686788,
    "FIELD6":"",
    "FIELD7":"" }
  },
  {
  "103": {
    "id":103,
    "name":"Eisenstadt-Umgebung",
    "pop":41474,
    "lat":47.85458,
    "lng":16.576139,
    "FIELD6":"",
    "FIELD7":"" }
  }
  ]

 function foo(region)
{   
    for(i=0; i<region.length;i++)   
{

    document.getElementById("results").innerHTML = region[i]["101"]["name"] + " // " + region[i]["103"]["name"];
}
}

foo(region);

  </script>
</body>
</html>

【问题讨论】:

  • 你能改变regions的结构吗?现在的结构没有那么有意义...使用var regions = {"101": { "name": ..., "pop": ... }, "102": { "name": ..., "pop" ... } 您可以将foo() 压缩为document.getElementById("results").innerHTML = regions["101"]["name"] + "//" + regions["103"]["name"];
  • ok,如果你有该结构中的数据,谢谢你的好解决方案!

标签: javascript arrays object find key


【解决方案1】:

试试这个

function foo(region) {
  function getPropertyByKeys(region, keys, prop) {
    return region.filter(function(el) {
      return keys.indexOf(Object.keys(el).pop()) >= 0;
    }).map(function(el) {
      return el[Object.keys(el).pop()][prop];
    })
  }

  document.getElementById('results').innerHTML = getPropertyByKeys(region, ['101', '103'], 'name').join(' // ');
}

Example

【讨论】:

    【解决方案2】:

    如果你观察你的 for 循环

    for(i=0; i<region.length;i++)   
    {
        document.getElementById("results").innerHTML = region[i]["101"]["name"] +
        " // " + region[i]["103"]["name"];
    }
    

    您正在尝试访问 id "103" for i = 0; id "103" 不存在,所以你得到TypeError

    您可以使用对象枚举(遍历对象属性),如下所示:

    function foo(region) {
      var name = '';
      for(var i = 0; i < region.length; i++) {
        for(var o in region[i]) {
          if (region[i].hasOwnProperty(o)) {
             //check for o[id] == 101? 
             name += region[i][o]['name'];
          }
        }    
      }
      document.getElementById("results").innerHTML = name;
    }
    
    foo(region);
    

    【讨论】:

    • 感谢您的评论!这是个好主意,但我想从 lat 的“101”、lat 的 103 或 lat 的 145 获取对象。我想说 region["102]" 告诉我你的属性(lat.lng 等...)然后我想计算对象 101 和对象 1xx。
    【解决方案3】:

    试试这个:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <title>Unbenanntes Dokument</title>
    </head>
        <body>
            
    <div id="results"></div>
    
    <script>
    var region = [
      {
      "101": {
        "id":101,
        "name":"Eisenstadt(Stadt)",
        "pop":13485,
        "lat":47.845876,
        "lng":16.518073,
        "FIELD6":"",
        "FIELD7":"" }
      },
      {
      "102": {
        "id":102,
        "name":"Rust(Stadt)",
        "pop":1942,
        "lat":47.803858,
        "lng":16.686788,
        "FIELD6":"",
        "FIELD7":"" }
      },
      {
      "103": {
        "id":103,
        "name":"Eisenstadt-Umgebung",
        "pop":41474,
        "lat":47.85458,
        "lng":16.576139,
        "FIELD6":"",
        "FIELD7":"" }
      }
      ]
    
     function foo(region)
    {   
        for(i=0; i<region.length;i++)   
    {
    
       document.getElementById("results").innerHTML = region[i]["101"]["name"] + " // " + region[(i+2)]["103"]["name"];
       
    }
    }
    
    foo(region);
    
      </script>
        </body>
    </html>

    【讨论】:

    • 谢谢,我知道这可行,但输出是动态的。如果我有一个包含 800 个 objectsID 的文档,并且我想计算 objectID 345 和 678 这将是一个问题
    猜你喜欢
    • 2019-04-12
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多