Разделение строк на массив объектов

#javascript #php #arrays #laravel #split

#javascript #php #массивы #laravel #разделение

Вопрос:

У меня есть список lat / lng, хранящийся в БД

Если флажок установлен, я получаю значение в массиве name='checkbox[]' .
Рассмотрим мой HTML:

 <input type="checkbox" value="123,456" />
<input type="checkbox" value="789,1011" />
  

Я хотел бы получить результирующие данные в этой форме (массив объектов)

 [
    {lat: "123", lng: "456"},
    {lat: "789", lng: "1011"} 
]
  

Я попробовал это, но он не разделяет и не сохраняет данные в lat и lng

 $(document).ready(function() {

  var tmp = [];

  $("input[name='checkbox[]']").change(function() {
    var checked = $(this).val();
    if ($(this).is(':checked')) {
      tmp.push(checked);
      const [lat1[], lon1[]] = tmp.split(',');
    } else {
      tmp.splice($.inArray(checked, tmp), 1);
    }
  });

  $('#show_all_point').on('click', function() {
    alert(lat1, lon1);
  });

});
  

Комментарии:

1. Вы имеете в виду… [{lat:0, lng:0}, {lat:0, lng:0}]

2. [{широта: 123, спг:456}, {широта: 789, спг:1011}]

3.PS ваш ввод не имеет name «флажка», а type

Ответ №1:

Создайте повторно getPoints() используемую функцию, которая использует элементы jQuery .filter() с :checked помощью селектора:

 function getPoints() {
  return $(":checkbox").filter(":checked").get().reduce((a, el) => {
    const ll = el.value.split(",");
    a.push({lat:ll[0], lng:ll[1]});
    return a;
  }, []);
}

  

$('#show_all').on('click', function () {
   const points = getPoints();
   alert(JSON.stringify(points, null, 4))
});  
 <input type="checkbox" value="123,456" />
<input type="checkbox" value="789,1011" />
<button id="show_all">SHOW SELECTED POINTS</button>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>