我如何使用 Json 数据作为数组
how i can use Json data as an array
这是我第一次使用 javvscript,我正在基于我想要的一些 jason 数据开发一个计算器,当我输入经度和纬度时,我得到了与该经度和纬度相关联的网格代码
这可能 json 数据看起来像
myData =
{
"datagrid": [{"GRIDCODE":1735,"lat":35.91511132,"long":-5.401484264},
{"GRIDCODE":1805,"lat":35.90677815,"long":-5.468149593},
{"GRIDCODE":1808,"lat":35.90677815,"long":-5.459816427}
]
}
这是我的尝试:
<!DOCTYPE html>
<html>
<body>
<p>Looping through arrays inside arrays.</p>
<p id="demo"></p>
<script>
var lat = 35.90677815;
var long = -5.468149593
var myObj, i, j, x,y,z = "";
myData = {"datagrid": [{"GRIDCODE":1735,"lat":35.91511132,"long":-5.401484264},{"GRIDCODE":1805,"lat":35.90677815,"long":-5.468149593},{"GRIDCODE":1808,"lat":35.90677815,"long":-5.459816427},{"GRIDCODE":1804,"lat":35.90677815,"long":-5.451483261},{"GRIDCODE":1657,"lat":35.90677815,"long":-5.40981743},{"GRIDCODE":1718,"lat":35.90677815,"long":-5.401484264},{"GRIDCODE":1738,"lat":35.90677815,"long":-5.384817932},{"GRIDCODE":1784,"lat":35.89844499,"long":-5.476482759}
]
}
for (i in myData.datagrid) {
if (lat = myData.datagrid[i].lat && long = myData.datagrid[i].long )
{
x += "<h2>" + myData.datagrid[i].GRIDCODE + "</h2>";
y += lat ;
z += long ;
}
}
document.getElementById("demo").innerHTML = x,y,z;
</script>
</body>
</html>
您在 if 语句中混淆了变量分配和测试。您的 if 语句应包含相等性测试“==”,然后您需要将这些值分别分配给变量。
<!DOCTYPE html>
<html>
<body>
<p>Looping through arrays inside arrays.</p>
<p id="demo"></p>
<script>
var lat = 35.90677815;
var long = -5.468149593
var myObj, i, j, x, y, z = "";
myData = {
"datagrid": [{
"GRIDCODE": 1735,
"lat": 35.91511132,
"long": -5.401484264
}, {
"GRIDCODE": 1805,
"lat": 35.90677815,
"long": -5.468149593
}, {
"GRIDCODE": 1808,
"lat": 35.90677815,
"long": -5.459816427
}, {
"GRIDCODE": 1804,
"lat": 35.90677815,
"long": -5.451483261
}, {
"GRIDCODE": 1657,
"lat": 35.90677815,
"long": -5.40981743
}, {
"GRIDCODE": 1718,
"lat": 35.90677815,
"long": -5.401484264
}, {
"GRIDCODE": 1738,
"lat": 35.90677815,
"long": -5.384817932
}, {
"GRIDCODE": 1784,
"lat": 35.89844499,
"long": -5.476482759
}]
}
for (i in myData.datagrid) {
if (lat == myData.datagrid[i].lat && long == myData.datagrid[i].long) {
x += "<h2>" + myData.datagrid[i].GRIDCODE + "</h2>";
y += myData.datagrid[i].lat;
z += myData.datagrid[i].long;
}
}
document.getElementById("demo").innerHTML = x, y, z;
</script>
</body>
</html>
这是一种在对象数组中查找特定值的简洁方法。 (我会在下面添加一个更好的。)
// Defines initial values
const
desiredLat = 35.90677815,
desiredLong = -5.468149593,
myData = {
"datagrid": [
{ "GRIDCODE": 1735,"lat": 35.91511132, "long": -5.401484264 },
{ "GRIDCODE": 1805, "lat": 35.90677815, "long": -5.468149593 },
{ "GRIDCODE": 1808, "lat": 35.90677815, "long":-5.459816427 },
{ "GRIDCODE": 1784, "lat": 35.89844499, "long":-5.476482759 }
]
};
// Calls a lookup function and binds the returned value to `gridcode`
// Then builds a string from the result and logs it to the browser console
const
gridcode = lookupGridcodeByLatAndLong(myData.datagrid),
headerHTML = "<h2>" + gridcode + "</h2>";
console.log(headerHTML);
// Defines the lookup function
function lookupGridcodeByLatAndLong(sourceArray){
let gridcode = 0;
// Loops through the source array and updates the value of `gridcode`
// when matching `.lat` and `.long` properties are found
for (let currentObject of sourceArray){
if (currentObject.lat === desiredLat && currentObject.long === desiredLong){
gridcode = currentObject.GRIDCODE;
}
}
// Returns (to the code that called the function) the result of the most recent match
// (If no object has both `desiredLat` and `desiredLong`, gridcode is still zero)
return gridcode;
}
或者:
几年前,Array.find
方法内置于 JavaScript 中。它这样做:
- 采用 returns true 或 false 的函数。 (我们根据具体情况编写此功能以满足我们的需要。)
- 将我们的函数应用于数组中的每个项目,直到我们的函数 returns 对于其中一项为真。
- 为我们提供函数返回 true 的项目。
在本例中,我使用了箭头函数,但您可以改用传统函数。
参见 MDNArray.prototype.find and Arrow functions
// Defines initial values
const
desiredLat = 35.90677815,
desiredLong = -5.468149593,
myData = {
"datagrid": [
{ "GRIDCODE": 1735, "lat": 35.91511132, "long": -5.401484264 },
{ "GRIDCODE": 1805, "lat": 35.90677815, "long": -5.468149593 },
{ "GRIDCODE": 1808, "lat": 35.90677815, "long": -5.459816427 },
{ "GRIDCODE": 1784, "lat": 35.89844499, "long": -5.476482759 }
]
},
datagrid = myData.datagrid;
// Uses Array.find to get the value more succinctly
// (This method stops searching when it finds the first match)
const
foundObject = datagrid.find(currentObject =>
desiredLat === currentObject.lat
&& desiredLong === currentObject.long
),
gridcode = foundObject.GRIDCODE,
headerHTML = "<h2>" + gridcode + "</h2>";
console.log(headerHTML);
这是我第一次使用 javvscript,我正在基于我想要的一些 jason 数据开发一个计算器,当我输入经度和纬度时,我得到了与该经度和纬度相关联的网格代码 这可能 json 数据看起来像
myData =
{
"datagrid": [{"GRIDCODE":1735,"lat":35.91511132,"long":-5.401484264},
{"GRIDCODE":1805,"lat":35.90677815,"long":-5.468149593},
{"GRIDCODE":1808,"lat":35.90677815,"long":-5.459816427}
]
}
这是我的尝试:
<!DOCTYPE html>
<html>
<body>
<p>Looping through arrays inside arrays.</p>
<p id="demo"></p>
<script>
var lat = 35.90677815;
var long = -5.468149593
var myObj, i, j, x,y,z = "";
myData = {"datagrid": [{"GRIDCODE":1735,"lat":35.91511132,"long":-5.401484264},{"GRIDCODE":1805,"lat":35.90677815,"long":-5.468149593},{"GRIDCODE":1808,"lat":35.90677815,"long":-5.459816427},{"GRIDCODE":1804,"lat":35.90677815,"long":-5.451483261},{"GRIDCODE":1657,"lat":35.90677815,"long":-5.40981743},{"GRIDCODE":1718,"lat":35.90677815,"long":-5.401484264},{"GRIDCODE":1738,"lat":35.90677815,"long":-5.384817932},{"GRIDCODE":1784,"lat":35.89844499,"long":-5.476482759}
]
}
for (i in myData.datagrid) {
if (lat = myData.datagrid[i].lat && long = myData.datagrid[i].long )
{
x += "<h2>" + myData.datagrid[i].GRIDCODE + "</h2>";
y += lat ;
z += long ;
}
}
document.getElementById("demo").innerHTML = x,y,z;
</script>
</body>
</html>
您在 if 语句中混淆了变量分配和测试。您的 if 语句应包含相等性测试“==”,然后您需要将这些值分别分配给变量。
<!DOCTYPE html>
<html>
<body>
<p>Looping through arrays inside arrays.</p>
<p id="demo"></p>
<script>
var lat = 35.90677815;
var long = -5.468149593
var myObj, i, j, x, y, z = "";
myData = {
"datagrid": [{
"GRIDCODE": 1735,
"lat": 35.91511132,
"long": -5.401484264
}, {
"GRIDCODE": 1805,
"lat": 35.90677815,
"long": -5.468149593
}, {
"GRIDCODE": 1808,
"lat": 35.90677815,
"long": -5.459816427
}, {
"GRIDCODE": 1804,
"lat": 35.90677815,
"long": -5.451483261
}, {
"GRIDCODE": 1657,
"lat": 35.90677815,
"long": -5.40981743
}, {
"GRIDCODE": 1718,
"lat": 35.90677815,
"long": -5.401484264
}, {
"GRIDCODE": 1738,
"lat": 35.90677815,
"long": -5.384817932
}, {
"GRIDCODE": 1784,
"lat": 35.89844499,
"long": -5.476482759
}]
}
for (i in myData.datagrid) {
if (lat == myData.datagrid[i].lat && long == myData.datagrid[i].long) {
x += "<h2>" + myData.datagrid[i].GRIDCODE + "</h2>";
y += myData.datagrid[i].lat;
z += myData.datagrid[i].long;
}
}
document.getElementById("demo").innerHTML = x, y, z;
</script>
</body>
</html>
这是一种在对象数组中查找特定值的简洁方法。 (我会在下面添加一个更好的。)
// Defines initial values
const
desiredLat = 35.90677815,
desiredLong = -5.468149593,
myData = {
"datagrid": [
{ "GRIDCODE": 1735,"lat": 35.91511132, "long": -5.401484264 },
{ "GRIDCODE": 1805, "lat": 35.90677815, "long": -5.468149593 },
{ "GRIDCODE": 1808, "lat": 35.90677815, "long":-5.459816427 },
{ "GRIDCODE": 1784, "lat": 35.89844499, "long":-5.476482759 }
]
};
// Calls a lookup function and binds the returned value to `gridcode`
// Then builds a string from the result and logs it to the browser console
const
gridcode = lookupGridcodeByLatAndLong(myData.datagrid),
headerHTML = "<h2>" + gridcode + "</h2>";
console.log(headerHTML);
// Defines the lookup function
function lookupGridcodeByLatAndLong(sourceArray){
let gridcode = 0;
// Loops through the source array and updates the value of `gridcode`
// when matching `.lat` and `.long` properties are found
for (let currentObject of sourceArray){
if (currentObject.lat === desiredLat && currentObject.long === desiredLong){
gridcode = currentObject.GRIDCODE;
}
}
// Returns (to the code that called the function) the result of the most recent match
// (If no object has both `desiredLat` and `desiredLong`, gridcode is still zero)
return gridcode;
}
或者:
几年前,Array.find
方法内置于 JavaScript 中。它这样做:
- 采用 returns true 或 false 的函数。 (我们根据具体情况编写此功能以满足我们的需要。)
- 将我们的函数应用于数组中的每个项目,直到我们的函数 returns 对于其中一项为真。
- 为我们提供函数返回 true 的项目。
在本例中,我使用了箭头函数,但您可以改用传统函数。
参见 MDNArray.prototype.find and Arrow functions
// Defines initial values
const
desiredLat = 35.90677815,
desiredLong = -5.468149593,
myData = {
"datagrid": [
{ "GRIDCODE": 1735, "lat": 35.91511132, "long": -5.401484264 },
{ "GRIDCODE": 1805, "lat": 35.90677815, "long": -5.468149593 },
{ "GRIDCODE": 1808, "lat": 35.90677815, "long": -5.459816427 },
{ "GRIDCODE": 1784, "lat": 35.89844499, "long": -5.476482759 }
]
},
datagrid = myData.datagrid;
// Uses Array.find to get the value more succinctly
// (This method stops searching when it finds the first match)
const
foundObject = datagrid.find(currentObject =>
desiredLat === currentObject.lat
&& desiredLong === currentObject.long
),
gridcode = foundObject.GRIDCODE,
headerHTML = "<h2>" + gridcode + "</h2>";
console.log(headerHTML);