获取数组中列出的对象
Get object listed in an array
我在获取数组中的对象时遇到问题。
在我的例子中,我有一个 JSON 文件,其中包含对象及其 ID。我想通过查找对象的 ID 来获取对象。所以我想获得 Objekt(101 和 103)以进行进一步计算。 (在 C++ 中它将是一个 map ,然后迭代直到找到 101 并且 return。)在 Javascript 中我得到了那个错误:
"TypeError: region[i][103] is undefined"。我不知道出了什么问题。还是有更好的方法通过其 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>
试试这个
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(' // ');
}
如果你观察你的 for 循环
for(i=0; i<region.length;i++)
{
document.getElementById("results").innerHTML = region[i]["101"]["name"] +
" // " + region[i]["103"]["name"];
}
您正在尝试访问 ID“103”,因为 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);
试试这个:
<!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>
我在获取数组中的对象时遇到问题。 在我的例子中,我有一个 JSON 文件,其中包含对象及其 ID。我想通过查找对象的 ID 来获取对象。所以我想获得 Objekt(101 和 103)以进行进一步计算。 (在 C++ 中它将是一个 map ,然后迭代直到找到 101 并且 return。)在 Javascript 中我得到了那个错误: "TypeError: region[i][103] is undefined"。我不知道出了什么问题。还是有更好的方法通过其 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>
试试这个
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(' // ');
}
如果你观察你的 for 循环
for(i=0; i<region.length;i++)
{
document.getElementById("results").innerHTML = region[i]["101"]["name"] +
" // " + region[i]["103"]["name"];
}
您正在尝试访问 ID“103”,因为 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);
试试这个:
<!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>