对 flatList 中的项目进行排序
sorting the items in the flatList
在我的 React Native 应用程序中,我显示了我的办公室提供的服务以及这些服务在平面列表中的位置。我还在同一平面列表中显示了从人员当前地址开始的服务里程。我希望这些服务按里程排序。下面是我的屏幕数据:
以下位置提供服务:
123 Test Drive
(313) 231-4560
Miles: 7
__________________________
234 Test Drive
(450) 222-9999
Miles: 3
____________________________
121 Addr Drive
(560) 455-1211
Miles: 1
我可以通过从最低到最高对它们进行排序来显示这些英里,所以我想显示顶部有 1 英里,然后是 3 英里,然后是 7 英里的服务。下面是示例:
121 Addr Drive
(560) 455-1211
Miles: 1
____________________________
234 Test Drive
(450) 222-9999
Miles: 3
____________________________
123 Test Drive
(313) 231-4560
Miles: 7
唯一的问题是我正在计算这些里程。英里数不是直接来自我的 JSON 文件。我的 JSON 文件中有经度和纬度,我通过使用 geodist 来获取精确的英里数。
var geodist = require("geodist");
var dist = geodist(
{ lat: item.cLat, lon: item.cLong },
{ lat: item.LatL, lon: item.Long2 },
"mi"
);
下面是我显示服务地址的代码,Miles。
render() {
return (
<View>
<View>
<Text style={styles.title}>
{this.props.navigation.state.params.item.ser}
</Text>
<Text style={styles.SerContent}>
Service is available in the following locations:
</Text>
</View>
<View>
<FlatList
data={newList}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem={this._renderItem}
keyExtractor={(item, index) => index}
/>
</View>
</View>
);
}
下面是{_renderItem}的代码
_renderItem = ({ item }) => {
var geodist = require("geodist");
var dist = geodist(
{ lat: item.cLat, lon: item.cLong },
{ lat: item.LatL, lon: item.Long2 },
"mi"
);
return (
<View>
<Text style={styles.Address1}>{item.addr} </Text>
<Text style={styles.Address1}>{item.phone}</Text>
<Text style={styles.AddressSpace}>Miles:{dist}</Text>
</View>
);
}
下面是我的 JSON 文件:
[
{
id: "1",
fk: 1,
addr: "123 test drive",
phone: "(313) 231-4560",
LatL: "33.9387",
Long2: "-117.284",
cLat: "33.931",
cLong: "-117.40"
},
{
id: "2",
fk: 1,
addr: "234 Test Drive",
phone: "(450) 222-9999",
LatL: "33.977",
Long2: "-117.37",
cLat: "33.93",
cLong: "-117.409"
},
{
id: "3",
fk: 1,
addr: "121 Addr drive",
phone: "560) 455-1211",
LatL: "33.76",
Long2: "-116.97",
cLat: "33.9319",
cLong: "-117.409"
}
];
任何帮助将不胜感激。
在将数组作为数据提供给 FlatList
之前,您可以通过 distance
sort
数组
将距离放在状态中可能是个好主意,这样您就不必在排序和 _renderItem
方法中都进行计算。
<FlatList
data={newList.sort((a, b) => {
const aDist = geodist(
{ lat: a.cLat, lon: a.cLong },
{ lat: a.LatL, lon: a.Long2 },
"mi"
);
const bDist = geodist(
{ lat: b.cLat, lon: b.cLong },
{ lat: b.LatL, lon: b.Long2 },
"mi"
);
return aDist - bDist;
})}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem={this._renderItem}
keyExtractor={(item, index) => index}
/>
使用Tholle方法,我使用了Geolib Liberary。并使用方法 getDistance 比较距离,这就是结果。
<FlatList data={newList.sort((a, b) => {
const aDist = getDistance({ //get distance between plaza and current location
latitude: a.latitud,
longitude: a.longitud
}, {
latitude: latitude,
longitude: longitude,
})
const bDist = getDistance({ //get distance between plaza and current location
latitude: b.latitud,
longitude: b.longitud
}, {
latitude: latitude,
longitude: longitude,
})
return aDist - bDist; })} ItemSeparatorComponent={this.FlatListItemSeparator} renderItem={this._renderItem}keyExtractor={(item, index) => index} />
其中纬度和经度是用户的位置,对象数据已经有纬度和经度。
不要忘记导入:
import {getDistance} from 'geolib';
在我的 React Native 应用程序中,我显示了我的办公室提供的服务以及这些服务在平面列表中的位置。我还在同一平面列表中显示了从人员当前地址开始的服务里程。我希望这些服务按里程排序。下面是我的屏幕数据:
以下位置提供服务:
123 Test Drive
(313) 231-4560
Miles: 7
__________________________
234 Test Drive
(450) 222-9999
Miles: 3
____________________________
121 Addr Drive
(560) 455-1211
Miles: 1
我可以通过从最低到最高对它们进行排序来显示这些英里,所以我想显示顶部有 1 英里,然后是 3 英里,然后是 7 英里的服务。下面是示例:
121 Addr Drive
(560) 455-1211
Miles: 1
____________________________
234 Test Drive
(450) 222-9999
Miles: 3
____________________________
123 Test Drive
(313) 231-4560
Miles: 7
唯一的问题是我正在计算这些里程。英里数不是直接来自我的 JSON 文件。我的 JSON 文件中有经度和纬度,我通过使用 geodist 来获取精确的英里数。
var geodist = require("geodist");
var dist = geodist(
{ lat: item.cLat, lon: item.cLong },
{ lat: item.LatL, lon: item.Long2 },
"mi"
);
下面是我显示服务地址的代码,Miles。
render() {
return (
<View>
<View>
<Text style={styles.title}>
{this.props.navigation.state.params.item.ser}
</Text>
<Text style={styles.SerContent}>
Service is available in the following locations:
</Text>
</View>
<View>
<FlatList
data={newList}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem={this._renderItem}
keyExtractor={(item, index) => index}
/>
</View>
</View>
);
}
下面是{_renderItem}的代码
_renderItem = ({ item }) => {
var geodist = require("geodist");
var dist = geodist(
{ lat: item.cLat, lon: item.cLong },
{ lat: item.LatL, lon: item.Long2 },
"mi"
);
return (
<View>
<Text style={styles.Address1}>{item.addr} </Text>
<Text style={styles.Address1}>{item.phone}</Text>
<Text style={styles.AddressSpace}>Miles:{dist}</Text>
</View>
);
}
下面是我的 JSON 文件:
[
{
id: "1",
fk: 1,
addr: "123 test drive",
phone: "(313) 231-4560",
LatL: "33.9387",
Long2: "-117.284",
cLat: "33.931",
cLong: "-117.40"
},
{
id: "2",
fk: 1,
addr: "234 Test Drive",
phone: "(450) 222-9999",
LatL: "33.977",
Long2: "-117.37",
cLat: "33.93",
cLong: "-117.409"
},
{
id: "3",
fk: 1,
addr: "121 Addr drive",
phone: "560) 455-1211",
LatL: "33.76",
Long2: "-116.97",
cLat: "33.9319",
cLong: "-117.409"
}
];
任何帮助将不胜感激。
在将数组作为数据提供给 FlatList
distance
sort
数组
将距离放在状态中可能是个好主意,这样您就不必在排序和 _renderItem
方法中都进行计算。
<FlatList
data={newList.sort((a, b) => {
const aDist = geodist(
{ lat: a.cLat, lon: a.cLong },
{ lat: a.LatL, lon: a.Long2 },
"mi"
);
const bDist = geodist(
{ lat: b.cLat, lon: b.cLong },
{ lat: b.LatL, lon: b.Long2 },
"mi"
);
return aDist - bDist;
})}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem={this._renderItem}
keyExtractor={(item, index) => index}
/>
使用Tholle方法,我使用了Geolib Liberary。并使用方法 getDistance 比较距离,这就是结果。
<FlatList data={newList.sort((a, b) => {
const aDist = getDistance({ //get distance between plaza and current location
latitude: a.latitud,
longitude: a.longitud
}, {
latitude: latitude,
longitude: longitude,
})
const bDist = getDistance({ //get distance between plaza and current location
latitude: b.latitud,
longitude: b.longitud
}, {
latitude: latitude,
longitude: longitude,
})
return aDist - bDist; })} ItemSeparatorComponent={this.FlatListItemSeparator} renderItem={this._renderItem}keyExtractor={(item, index) => index} />
其中纬度和经度是用户的位置,对象数据已经有纬度和经度。 不要忘记导入:
import {getDistance} from 'geolib';