#javascript #reactjs
Вопрос:
Вот мой массив:
const locations = [
{
results: [
{
name: "Rome, Italy",
price: 100,
distance: 1299,
match: 96,
lat: 40,
lng: 60,
},
{
name: "Beijing, China",
price: 200,
distance: 3000,
match: 93,
lat: 100,
lng: 100,
},
{
name: "California, USA",
price: 250,
distance: 420,
match: 75,
lat: 200,
lng: 200,
},
],
},
{
results: [
{
name: "Rome, Italy",
price: 100,
distance: 1299,
match: 96,
lat: 50,
lng: 60,
},
{
name: "Beijing, China",
price: 200,
distance: 3000,
match: 93,
lat: 100,
lng: 100,
},
{
name: "California, USA",
price: 250,
distance: 420,
match: 75,
lat: 200,
lng: 200,
},
],
},
];
Теперь я хочу взять lat
lng
координаты и и передать их в качестве реквизита этого компонента:
{locations.map((location, index) => {
return <MapMarker locations={locations[index]} />;
})}
А вот фактический код компонентов:
<MapMarkerContainersContainer>
{locations.map((location, index) => {
return (
<AnyReactComponent
lat={location.result[index].lat}
lng={location.result[index].lng}
text="My Marker"
/>
);
})}
</MapMarkerContainersContainer>
Есть идеи, что я делаю не так?
Комментарии:
1. Что происходит/не происходит, что отличается от того, что вы ожидаете? Пожалуйста, добавьте эту информацию к вашему вопросу.
Ответ №1:
Вы используете индекс locations
массива. Таким образом, вместо использования location.result[index]
вы могли бы уменьшить все значения locations.result
внутри locations
массива и просмотреть результаты:
<MapMarkerContainersContainer>
{
locations
.reduce((acc, cur) => [...acc, ...cur.results], [])
.map((location) => {
return (
<AnyReactComponent
lat={location.lat}
lng={location.lng}
text="My Marker"
/>
);
})
}
</MapMarkerContainersContainer>
Ответ №2:
У вас есть массив внутри массива, так что вы можете сначала выровнять их.
const marks = []
locations.forEach(v => {
v.results.forEach(i => { mark.push(i) })
})
И затем
{marks.map(m =>
<AnyReactComponent
key={`${m.lat}${m.lng}`}
lat={m.lat}
lng={m.lng}
text="My Marker"
/>
})}
Вам нужен ключ, иначе вы получите ошибки.
Ответ №3:
Вам нужно выровнять массив перед вызовом map.
<MapMarkerContainersContainer>
{locations.reduce((prev, cur) => [...prev, ...cur.results], []).map((location, index) => {
return (
<AnyReactComponent
lat={location.lat}
lng={location.lng}
text="My Marker"
/>
);
})}
</MapMarkerContainersContainer>