我正在使用 Google Maps API v3,我想将我发出的 API 请求数量减少到最低限度。
对我来说存储最后一个请求并测试下一个是否等于最后一个请求是有意义的,如果为真则忽略它:
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中测试这两个对象的相等性?
解决方案
Beetroot-Beetroot 的回答让我走上了正轨
由于只有一个对象,因此任何将 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) {
...
}
}