Вот простой способ найти определенное значение в массиве объектов. (И я добавлю еще лучше ниже.)
// 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 по состоянию на несколько лет go. Это делает это:
- принимает функцию, которая возвращает истину или ложь. (Мы создаем эту функцию в каждом конкретном случае в соответствии с нашими потребностями.)
- применяет нашу функцию к каждому элементу в массиве, пока наша функция не возвращает true для одного из элементов.
- дает нам элемент, для которого функция вернула true.
В этом случае я использовал функцию со стрелкой, но вместо этого можно использовать традиционную функцию.
См. Array.prototype.find и Функции стрелок по MDN
// 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);