0

What i wanted to do is access random property for example let1, let2 with their first string in array which is ID "1" , "2" , "3" , "4" , "5". brojleta is actually that ID i mentioned before, it is different from id down there(var id = item[0][1]). What i need is to get all other strings based on their ID. I tried it like this :

var data = {
    let1:[["1","2","10.2.2019.","11.2.2019.","Beograd Aerodrom","Amsterdam Aerodrom","30","12000"]],
    let2:[["2","4","15.2.2019.","16.2.2019","Amsterdam Aerodrom","Rim Aerodrom","30","8000"]],
    let3:[["3","6","25.2.2019.","28.2.2019.","Rim Aerodrom","Beograd Aerodrom","30","8000"]],
    let4:[["4","8","13.2.2019.","14.2.2019.","Beograd Aerodrom","Moskva Aerodrom","30","13000"]],
    let5:[["5","10","1.3.2019.","4.3.2019.","Beograd Aerodrom","New York Aerodrom","30","18000"]]
};


function getParamValue(brojleta) {
  var location = decodeURI(window.location.toString());
  var index = location.indexOf("?") + 1;
  var subs = location.substring(index, location.length);
  var splitted = subs.split("&");

  for (i = 0; i < splitted.length; i++) {
    var s = splitted[i].split("=");
    var pName = s[0];
    var pValue = s[1];
    if (pName == brojleta) {
      return pValue;
    }
  }

}

var brojleta = getParamValue("id");
var item = data.find(item => item[0][0] === brojleta);
var id = item[0][1]
var datumpolaska = item[0][2]
var datumdolaska = item[0][3]
var polazniaerodrom = item[0][4]
var dolazniaerodrom = item[0][5]
var brojsedista = item[0][6]
var cenakarte = item[0][7]

  var data1 = data.let1[0];
  var data2 = data.let2[0];
  var data3 = data.let3[0];
  var data4 = data.let4[0];
  var data5 = data.let5[0];
  
  /* this is the code for adding data from array to table */
  
  $(document).ready(function(){
    var row1cells = $("#row1 td");
    var row2cells = $("#row2 td");
    var row3cells = $("#row3 td");
    var row4cells = $("#row4 td");
    var row5cells = $("#row5 td");
  
    for (var index=0; index<8; index++) {
      $(row1cells[index]).html(data1[index]);
      $(row2cells[index]).html(data2[index]);
      $(row3cells[index]).html(data3[index]);
      $(row4cells[index]).html(data4[index]);
      $(row5cells[index]).html(data5[index]);
    }
  });
Filip Račić
  • 90
  • 1
  • 7

4 Answers4

0

To make your code work you should choose variable data to be an array of arrays instead of an object. Then you can run var item = data.find(item => item[0] === brojleta); and similar operations.

It would look like this:

var data =  [["1","2","10.2.2019.","11.2.2019.","Beograd Aerodrom","Amsterdam Aerodrom","30","12000"],
   ["2","4","15.2.2019.","16.2.2019","Amsterdam Aerodrom","Rim Aerodrom","30","8000"],
   ["3","6","25.2.2019.","28.2.2019.","Rim Aerodrom","Beograd Aerodrom","30","8000"],
    ["4","8","13.2.2019.","14.2.2019.","Beograd Aerodrom","Moskva Aerodrom","30","13000"],
    ["5","10","1.3.2019.","4.3.2019.","Beograd Aerodrom","New York Aerodrom","30","18000"]];
Ignas Poška
  • 57
  • 1
  • 4
  • 7
  • What i have to do is to add all of that to table, i updated snippet with my code for adding it to table – Filip Račić Feb 12 '19 at 14:19
  • Can you provide full snippet with html? There are too many dependencies to write static code by guessing. Please use Codepen or something similar. – Ignas Poška Feb 12 '19 at 14:32
0

I think you really want this:

Remove the || 3 // test #3 after testing

Try removing the 3 from the input and click search too

var data = {
    let1:[["1","2","10.2.2019.","11.2.2019.","Beograd Aerodrom","Amsterdam Aerodrom","30","12000"]],
    let2:[["2","4","15.2.2019.","16.2.2019","Amsterdam Aerodrom","Rim Aerodrom","30","8000"]],
    let3:[["3","6","25.2.2019.","28.2.2019.","Rim Aerodrom","Beograd Aerodrom","30","8000"]],
    let4:[["4","8","13.2.2019.","14.2.2019.","Beograd Aerodrom","Moskva Aerodrom","30","13000"]],
    let5:[["5","10","1.3.2019.","4.3.2019.","Beograd Aerodrom","New York Aerodrom","30","18000"]]
};


function getParamValue(brojleta) {
  return new URLSearchParams(document.location.search.substring(1)).get(brojleta)
}

function show(item) {
  $tr = $("<tr/>"), $tbd = $("#tbd");
  $.each(item,function(_,fld) {
    $tr.append("<td>"+fld+"</td>");
  })
  $tr.appendTo($tbd);
}  
function showAll() {
  Object.keys(data).forEach(function(key) {
    show(data[key][0]);
  })
}  
$(function() {
  $("#search").on("click",function() {
    $("#tbd").empty();  
    var brojleta = $("#broj_leta").val();
    if (brojleta) show(data["let"+brojleta][0])
    else showAll();
  });    
  var brojleta = getParamValue("id") || 3 // test #3
  if (brojleta) $("#broj_leta").val(brojleta);
  $("#search").trigger("click");
})
th, td { border:1px solid lightgrey; padding: 3px }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="broj_leta" /><button id="search">Search</button>
<table>
  <thead>
    <tr>
      <th>id</th>
      <th>Datumpolaska</th>
      <th>Datumdolaska</th>
      <th>Plazniaerodrom</th>
      <th>Dolazniaerodrom</th>
      <th>Brojsedista</th>
      <th>Cenakarte</th>
  </tr>
</thead>
<tbody id="tbd">
</tbody>
</table>
mplungjan
  • 169,008
  • 28
  • 173
  • 236
-1

You can use the lodash function find().

This is the same function as Array.find but it works on Object.

https://lodash.com/docs/4.17.11#find

Sinane
  • 1,614
  • 2
  • 12
  • 17
-1

You can first filter the data based on ID and then map your required variable to final output array in below code output.

var brojleta = 1;

const mappedarray = Object.entries(data).filter((k,v)=>{return k[0] == "let"+brojleta});
console.log(mappedarray[0][1][0]);
mplungjan
  • 169,008
  • 28
  • 173
  • 236
Sandip
  • 40
  • 3