Мой ответ о том, как это сделать в нативном коде Swift, вы можете найти здесь: Swift найти ближайший маяк по rssi
Вот прямой перевод этого кода Swift на JavaScript:
var closestBeacon = null;
for (var beacon in data.beacons) {
if (beacon.rssi < 0 && closestBeacon != null && beacon.rssi > closestBeacon.rssi) {
closestBeacon = beacon;
}
}
Имейте в виду, что обратный вызов this.delegate.didRangeBeaconsInRegion().subscribe( data => {
будет происходить раз в секунду. Поэтому, если вы хотите выдать оповещение на основе ближайшего маяка, вам также следует позаботиться о том, чтобы не выдавать новые оповещения каждую секунду.
Если вы хотите отслеживать уже обработанные маяки, вы можете объявить новый объект в некоторой глобальной области видимости вне обратного вызова:
var triggeredBeacons = {};
Затем, прежде чем выполнять какую-либо обработку маяка, создайте строковый ключ на основе ваших идентификаторов маяка и убедитесь, что он не сработал раньше:
var beaconIdentifiers = beacon.uuid + " " + beacon.major + " " + beacon.minor;
if (triggeredBeacons[beaconIdentifiers] == true) {
// beacon has already triggered. Ignore it
}
else {
triggeredBeacons[beaconIdentifiers] = true;
// Put your beacon processing here
}