我正在将一个有效的JS解决方案重新实现为Typescript。 我有一组对象,它们具有纬度和经度的地理位置。
我想按照他们与某个特定位置currentLocation
的距离对其进行排序。
我想将currentLocation
存储为私有属性,并在sort函数中访问它。但是,在执行this.currentLocation
时,这在compare
中仍未定义。我试过了compare.bind(this)
,但没有成功。 this is not defined
。
任何想法如何解决这个问题?我用JS在全局变量中解决了它,但这并不优雅。 sortByDistance
是一种对象方法。
sortByDistance() {
this.currentPosition = Leaflet.latLng(this._currentLatLng[0], this._currentLatLng[1]);
function compare(a, b) {
let p1 = Leaflet.latLng(a.lat, a.lng);
let p2 = Leaflet.latLng(b.lat, b.lng);
if (p1.distanceTo(this.currentPosition) < p2.distanceTo(this.currentPosition))
return -1;
else if (p1.distanceTo(this.currentPosition) > p2.distanceTo(this.currentPosition))
return 1;
return 0;
}
compare.bind(this);
this.sorted = this.objects.sort(compare);
}
答案 0 :(得分:3)
您可以更改
function compare(a, b) {
let p1 = Leaflet.latLng(a.lat, a.lng);
let p2 = Leaflet.latLng(b.lat, b.lng);
if (p1.distanceTo(this.currentPosition) < p2.distanceTo(this.currentPosition))
return -1;
else if (p1.distanceTo(this.currentPosition) > p2.distanceTo(this.currentPosition))
return 1;
return 0;
}
带
compare = (a, b)=>{
let p1 = Leaflet.latLng(a.lat, a.lng);
let p2 = Leaflet.latLng(b.lat, b.lng);
if (p1.distanceTo(this.currentPosition) < p2.distanceTo(this.currentPosition))
return -1;
else if (p1.distanceTo(this.currentPosition) > p2.distanceTo(this.currentPosition))
return 1;
return 0;
}
以便this
处于词汇范围
答案 1 :(得分:3)
return this.$refs
返回一个新函数。试试compare.bind(this)
答案 2 :(得分:1)
bind
的工作方式略有不同:
const boundCompare = compare.bind(this);
this.sorted = this.objects.sort(boundCompare);