как я могу использовать Json данных в качестве массива - PullRequest
0 голосов
/ 29 апреля 2020

это мой первый раз с 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>

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Вот простой способ найти определенное значение в массиве объектов. (И я добавлю еще лучше ниже.)

// 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);
0 голосов
/ 29 апреля 2020

Вы смешали присвоение и тестирование переменных в своем операторе 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>
...