Google Maps API v3 を使用していますが、作成する API リクエストの数を最小限に抑えたいと考えています。
最後に行われたリクエストを保存し、次のリクエストが最後と等しいかどうかをテストし、true の場合は無視することは理にかなっています。
var request = {
origin: "John O'Groats",
destination: "Land's End",
waypoints: [{
location: "Penrith",
stopover: true
}],
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
// Dont make a new request if same as last
if (request !== lastRequest) {
lastRequest = request;
directionsService.route(request, function(response, status) {
...
}
}
上記は機能しませんでした。
だから私は試しましたJSON.stringify
:
if (JSON.stringify(request) !== JSON.stringify(lastRequest)) {
まだサイコロはありません。
次に、 underscore.js isEqual
関数を試しました。
if (!_.isEqual(request, lastRequest)) {
再び機能しません。
上記のすべてが間違った結果を返します。wpts
オブジェクト内の別のオブジェクトであるため、おそらく推測していrequest
ます。
javascriptでこれら2つのオブジェクトの同等性をテストするにはどうすればよいですか?
解決
Beetroot-Beetrootの答えは私を正しい軌道に乗せました
オブジェクトは 1 つしかないため、lastRequest と request を比較しようとすると、常に true が返されます。それ以外にはなり得ません。オブジェクトのプロパティが変更された場合でも、変更されたオブジェクトをそれ自体と比較することになります。
後でテストするためにリクエストの文字列化されたバージョンを保存すると、問題が解決しました。
var request = {
origin: "John O'Groats",
destination: "Land's End",
waypoints: [{
location: "Penrith",
stopover: true
}],
travelMode: google.maps.DirectionsTravelMode.DRIVING
},
requestStr = JSON.stringify(request);
// Dont make a new request if same as last
if (requestStr !== lastRequest) {
lastRequest = requestStr;
directionsService.route(request, function(response, status) {
...
}
}