2016-11-08 1 views
0

Если у меня есть массив объектов, которые были разобраны из JSON, такие как:листовку: добавить объект массива в слайдер

var results = [ 
    { 
    "time": 1478542485, 
    "lat": 50.64470631082, 
    "lng": 13.9902814650912 
    }, 
    { 
    "time": 1479542485, 
    "lat": 50.64570631082, 
    "lng": 13.9902814650912 
    }, 
    { 
    "time": 1578542485, 
    "lat": 50.64473631082, 
    "lng": 13.9902814650912 
    } 
} 
] 

Как я могу подтолкнуть их в массив таким образом, чтобы каждый объект массива будет выглядеть следующим образом:

var marker = L.marker([50.64470631082, 13.9902814650912], {time: 1478542485}); 

Это то, что я сделал до сих пор

var markers = []; 
    for (var i = 0; i < results.length; i++){ 
     var latln = new L.LatLng(results[i].lat, results[i].lng); 
     var time = results[i].time; 
     var t = '{time: ' + time + '}'; 
     var mark = L.marker(latln, t.replace("\'","")); 
     markers.push(mark); 
    } 

Я имею право LatLng, но время не выходит из буровой установки высота глаза наблюдателя Я пытаюсь использовать Leaflet Slider и отображать данные на карту.

+0

Нет такой вещи, как «массив объектов json». Значения JSON - это просто строки. Когда у вас есть стандартный JavaScript-массив объектов. – Tibrogargan

ответ

0

Это довольно прямое использование Array.prototype.map. .map() вызывается функцией (в данном случае функцией стрелки), которая создает новый элемент, основанный на существующем элементе (аргумент, передаваемый функции). Возвращаемое значение из карты - это новый массив, содержащий новые элементы.

// ------------------8<---------------------- 
 
// LeafletStub is just here to provide mock ups of the functions called in the `L` object 
 
function LeafletStub() { 
 
} 
 
LeafletStub.prototype.LatLng = function(lat, lng) { 
 
    return `lat: ${lat}, lng: ${lng}`; } 
 
LeafletStub.prototype.marker = function(latlng, time) { 
 
    return `latlng: {${latlng}}, time: ${time.time}`; } 
 
var L = new LeafletStub(); 
 
// ------------------8<---------------------- 
 

 
var inputObj = [{ 
 
    "time": 1478542485, 
 
    "lat": 50.64470631082, 
 
    "lng": 13.9902814650912 
 
}, { 
 
    "time": 1479542485, 
 
    "lat": 50.64570631082, 
 
    "lng": 13.9902814650912 
 
}, { 
 
    "time": 1578542485, 
 
    "lat": 50.64473631082, 
 
    "lng": 13.9902814650912 
 
}] 
 

 
// answer really starts here. 
 
var markers = inputObj.map(element => L.marker(L.LatLng(element.lat, element.lng), { time: element.time })); 
 

 
console.log(markers);

+0

«=>« дайте мне ошибку »выражение« ожидается » – Tenz

+0

@Tenz это функция стрелки. возможно, листовки не поддерживают его. использование простой функция синтаксис. он будет работать точно – Mahi

+0

@Tenz "normal" function version: 'var markers = inputObj.map (function (element) {return L.marker (L.LatLng (element.lat, element.lng), {time: element. time})}); ' – Tibrogargan

0

var results = [ 
 
    { 
 
    "time": 1478542485, 
 
    "lat": 50.64470631082, 
 
    "lng": 13.9902814650912 
 
    }, 
 
    { 
 
    "time": 1479542485, 
 
    "lat": 50.64570631082, 
 
    "lng": 13.9902814650912 
 
    }, 
 
    { 
 
    "time": 1578542485, 
 
    "lat": 50.64473631082, 
 
    "lng": 13.9902814650912 
 
    } 
 
    
 
] 
 
var a= results.map(function(b){ 
 
return [[b.lat,b.lng],{"time":b.time}]; 
 
}); 
 

 

 
console.log(a);

+0

Это правильно, но это не дает мне объект latlng. – Tenz

1

Объединить ответы Махи и Tibrogargan, я делаю это работает с помощью этого

var markers = results.map(function(b){ 
     return (L.marker(new L.LatLng(b.lat, b.lon), { time: b.time})) 
    }); 

Спасибо, ребята