私はあなたがarray()
オブジェクトのsort()
メソッドを実装することが可能な、あなたの多次元events []
配列に優先順位とタイムスタンプを提供している前提で、この応答を基づかよ。
以下のコードブロックは、このGoogle MAP APIの例を前提としています。
をevents[]
アレイ想定:
var events = [
['Faneuil Hall, Boston MA', 4, 42.33095, -71.10963, 'January 1, 2016 03:30:00', 3],
['Boston Common, Boston MA', 5, 42.35500, -71.06556, 'February 20, 2016 02:23:00', 5],
['The Paul Revere House, Boston MA', 5, 42.3637351, -71.0558839, 'June 20, 2016 02:24:00', 4],
['Fenway Park, Boston MA', 3, 42.3466803, -71.0994065, 'March 8, 2016 01:20:00', 2],
['Beacon Hill, Boston MA', 2, 42.3583059, -71.0711146, 'April 19, 2016 02:20:00', 1]
];
を今度はタイムスタンプ列(インデックス4)により、次に優先列(インデックス1)にsort()
方法の機能発現を起動します。私は、構造のより良い理解のためにコードの対話型と対になったバージョンの両方を含んでいます。時々、三元事業者は、著者とは対照的に、読者のために少し混乱することができる:
sort()
方法 - 冗長:
events.sort(function (a, b) {
var date1, date2, priority1, priority2;
date1 = new Date(a[4]).getTime();
date2 = new Date(b[4]).getTime();
priority = a[1];
priority = b[1];
if (priority1 < priority2) {
return 1;
} else if (priority1 > priority2) {
return -1;
} else if (date1 < date2) {
return 1;
} else if (date1 > date2) {
return -1;
} else {
return 0;
}
});
sort()
方法 - 縮小さ(三項演算子の使用)。
events.sort(function(a, b) {
var date1, date2, priority1, priority2;
return priority1 = a[1],
priority2 = b[1],
date1 = new Date(a[4]).getTime(),
date2 = new Date(b[4]).getTime(),
priority1 < priority2 ? 1 : priority1 > priority2 ? -1 : date1 < date2 ? 1 : date1 > date2 ? -1 : 0;
});
現在、配列の優先順位が最も高く、最新の配列から配列されているので、次のコード行をfor()
ループに挿入してz-インデックスを減らすことができます。
events[i][5] = events.length - [i];
以下コードスニペットは、実施例を示しています。また、上記のコードがどのように動作するかを示すためにJSFiddleを含んでいます。私の側から
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: {lat: 42.33196, lng: -71.020173}
});
setMarkers(map);
}
var events = [
['Faneuil Hall, Boston MA', 4, 42.33095, -71.10963, 'January 1, 2016 03:30:00', 3],
['Boston Common, Boston MA', 5, 42.35500, -71.06556, 'February 20, 2016 02:23:00', 5],
['The Paul Revere House, Boston MA', 5, 42.3637351, -71.0558839, 'June 20, 2016 02:24:00', 4],
['Fenway Park, Boston MA', 3, 42.3466803, -71.0994065, 'March 8, 2016 01:20:00', 2],
['Beacon Hill, Boston MA', 2, 42.3583059, -71.0711146, 'April 19, 2016 02:20:00', 1]
];
events.sort(function (a, b) {
var date1, date2, priority1, priority2;
date1 = new Date(a[4]).getTime();
date2 = new Date(b[4]).getTime();
priority1 = a[1];
priority2 = b[1];
if (priority1 < priority2) {
return 1;
} else if (priority1 > priority2) {
return -1;
} else if (date1 < date2) {
return 1;
} else if (date1 > date2) {
return -1;
} else {
return 0;
}
});
function setMarkers(map) {
var image = {
url: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png',
size: new google.maps.Size(20, 32),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(0, 32)
};
var shape = {
coords: [1, 1, 1, 20, 18, 20, 18, 1],
type: 'poly'
};
for (var i = 0; i < events.length; i++) {
events[i][5] = events.length - [i];
var beach = events[i];
var marker = new google.maps.Marker({
position: {lat: beach[2], lng: beach[3]},
map: map,
icon: image,
shape: shape,
title: beach[0],
zIndex: beach[5],
});
}
}
html, body {
height: 100%;
margin: 0;
padding: 0;
background-color: #C1F0C1;
}
#map {
height: 100%;
}
#pac-input {
margin: 5px;
padding: 10px;
}
<body>
<input id="pac-input" class="controls" type="text" placeholder="Search Box">
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDVcdnzK1fFrT1TXnWt1EPVCQvC2vg_AZY&libraries=places&callback=initMap" async defer></script>
</body>
+1ので、徹底しているため。前述のように、定期的に質問マーカーが追加されます(イベントが発生するたびにサーバーからのトリガーが生成され、DBから新しいマーカーが取得されます)、このコードからイベントが生成されません。events [i] [5] = events.length - [i]; '既に地図上に置かれている古いマーカーのzindexesを上書きしますか?定期的に発生する[jsFIddle](https://jsfiddle.net/g2x3fmo8/13/)デモイベントを更新しました。 – ndd
私は私が従うか分からない。わかりやすくするために、優先度と現在の日付でソートすることを検討していますか? –
ある程度まで、イベントマーカーは表示され続けます。たとえば、最初のタイムマップがロードされたときに10個のマーカーがあり、5分後に20個以上のイベント(ソフトウェアをダウンロードしている人やWebサイトにコメントする人など)この時点で、この新しい20個のマーカーがマップに追加されます(既に存在するマーカー10個に加えて)。あなたの例はどちらも素晴らしいスタートですが、マーカが配置されるとジョブが完了したものとみなします。実際、マーカーは外部データに基づいてノンストップで表示され続けます。 – ndd