如何使用两个值动态 render/load 我的数组?
How to dynamically render/load my array with two values?
我是 Java Script 和 ReactJS 的初学者,我正在做一个项目来提高我的知识。
我会在地图上渲染一些多边形点,我使用的是google-maps-react
库。
我有一个关于多边形的问题,为了能够在地图上绘制我必须以这种方式发送数据:
const coords = {
coords: [
[
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
{ lat: 25.774, lng: -80.19 },
],
[
{ lat: 25.774, lng: -60.19 },
{ lat: 18.466, lng: -46.118 },
{ lat: 32.321, lng: -44.757 },
{ lat: 25.774, lng: -60.19 },
],
],
};
问题是我的坐标格式不同。它们采用以下格式:
[
[
[-47.7027099655629, -22.26485424139211],
[-47.70271526762656, -22.26487408404245],
[-47.70272860122938, -22.26486817968162],
[-47.70275769033151, -22.26485486960603],
[-47.7027803963492, -22.26483968832534],
[-47.7027099655629, -22.26485424139211]
]
], [
[
[-47.70336262481528, -22.26561084941619],
[-47.70336542334331, -22.26561213882109],
[-47.70336596593334, -22.26561211173161],
[-47.7033695288571, -22.2656092720629],
[-47.70337969579747, -22.26560034650085],
[-47.70336262481528, -22.26561084941619]
]
]
如你所见,它们是不同类型的对象,它们知道如何告诉我是否有任何 javascript 函数可以让我以与模型的模型相同的方式保留我的坐标数组图书馆 google-maps-react
?
我希望我的数组看起来像这样:
const coords = {
coords: [
[
{ lat: -47.7027099655629, lng: -22.26485424139211 },
{ lat: -47.70271526762656, lng: -22.26487408404245 },
{ lat: -47.70275769033151, lng: -22.26485486960603 },
{ lat: -47.7027803963492, lng: -22.26483968832534 },
{ lat: -47.7027099655629, lng: -22.26485424139211 },
],
[
{ lat: -47.70336262481528, lng: -22.26561084941619 },
{ lat: -47.70336542334331, lng: -22.26561213882109 },
{ lat: -47.70336596593334, lng: -22.26561211173161 },
{ lat: -47.70337969579747, lng: -22.26560034650085 },
{ lat: -47.70336262481528, lng: -22.26561084941619 },
],
],
};
我没有办法一个一个地更改这些数据,我的坐标原始文件将近八千行,所以我需要一个自动执行此操作的功能。
谢谢!!
您必须使用循环函数映射该数据。由于在这里您需要遍历多个数组,因此我建议使用 reduce 函数。
如果你不知道什么是 reduce 函数,你应该先看看这里:https://www.w3schools.com/jsref/jsref_reduce.asp
基本上,您遍历每个元素并更改值。这是一个小例子,您可能需要根据需要进行调整:
const newCoordinates = coordinates.reduce((acc, curr) => {
const newCoordiantes = curr[0].map((coord) => ({
lat: coord[0],
lng: coord[1]
}));
acc.push([newCoordiantes]);
return acc;
}, []);
这是一个工作示例:https://codesandbox.io/s/sharp-cloud-nfx4k?file=/src/index.js
假设它是一个数组数组,您可以使用函数 reduce
和函数 map
来构建所需的输出。
let arr = [ [ [ [-47.7027099655629, -22.26485424139211], [-47.70271526762656, -22.26487408404245], [-47.70272860122938, -22.26486817968162], [-47.70275769033151, -22.26485486960603], [-47.7027803963492, -22.26483968832534], [-47.7027099655629, -22.26485424139211] ] ], [ [ [-47.70336262481528, -22.26561084941619], [-47.70336542334331, -22.26561213882109], [-47.70336596593334, -22.26561211173161], [-47.7033695288571, -22.2656092720629], [-47.70337969579747, -22.26560034650085], [-47.70336262481528, -22.26561084941619] ] ]];
let coords = {
coords: arr.reduce((a, [c]) => a.concat([c.map(([lat, lng]) => ({lat, lng}))]), [])
};
console.log(coords);
.as-console-wrapper { max-height: 100% !important; top: 0; }
可以使用map
方法。您似乎在彼此之间有 3 层数组,最后您有一个 [lat, lng]
的数组,您想要将其更改为 { lat, lng }
,但似乎您有一层只包含一个sub-element 你想把它弄平。因此,您可以级联两个 map
调用(其中一个调用隐式解构 single-element 数组),如下所示:
const convert = arr => arr.map(([group]) => group.map(([lat, lng]) => ({ lat, lng })))
const inputData = [[[[-47.7027099655629,-22.26485424139211],[-47.70271526762656,-22.26487408404245],[-47.70272860122938,-22.26486817968162],[-47.70275769033151,-22.26485486960603],[-47.7027803963492,-22.26483968832534],[-47.7027099655629,-22.26485424139211]]],[[[-47.70336262481528,-22.26561084941619],[-47.70336542334331,-22.26561213882109],[-47.70336596593334,-22.26561211173161],[-47.7033695288571,-22.2656092720629],[-47.70337969579747,-22.26560034650085],[-47.70336262481528,-22.26561084941619]]]]
const outputData = convert(inputData)
console.log(outputData)
.as-console-wrapper { max-height: 100% !important; top: 0; }
请注意,您显示的输入数据的格式为 [...], [...]
,它本身并不是一个完整的数据结构(它将是两个由逗号运算符连接的数组,这没有多大意义) .我猜应该有一个围绕它的外部数组 ([[...], [...]]
),我在我的示例中添加了它(否则它不会工作)。
我是 Java Script 和 ReactJS 的初学者,我正在做一个项目来提高我的知识。
我会在地图上渲染一些多边形点,我使用的是google-maps-react
库。
我有一个关于多边形的问题,为了能够在地图上绘制我必须以这种方式发送数据:
const coords = {
coords: [
[
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
{ lat: 25.774, lng: -80.19 },
],
[
{ lat: 25.774, lng: -60.19 },
{ lat: 18.466, lng: -46.118 },
{ lat: 32.321, lng: -44.757 },
{ lat: 25.774, lng: -60.19 },
],
],
};
问题是我的坐标格式不同。它们采用以下格式:
[
[
[-47.7027099655629, -22.26485424139211],
[-47.70271526762656, -22.26487408404245],
[-47.70272860122938, -22.26486817968162],
[-47.70275769033151, -22.26485486960603],
[-47.7027803963492, -22.26483968832534],
[-47.7027099655629, -22.26485424139211]
]
], [
[
[-47.70336262481528, -22.26561084941619],
[-47.70336542334331, -22.26561213882109],
[-47.70336596593334, -22.26561211173161],
[-47.7033695288571, -22.2656092720629],
[-47.70337969579747, -22.26560034650085],
[-47.70336262481528, -22.26561084941619]
]
]
如你所见,它们是不同类型的对象,它们知道如何告诉我是否有任何 javascript 函数可以让我以与模型的模型相同的方式保留我的坐标数组图书馆 google-maps-react
?
我希望我的数组看起来像这样:
const coords = {
coords: [
[
{ lat: -47.7027099655629, lng: -22.26485424139211 },
{ lat: -47.70271526762656, lng: -22.26487408404245 },
{ lat: -47.70275769033151, lng: -22.26485486960603 },
{ lat: -47.7027803963492, lng: -22.26483968832534 },
{ lat: -47.7027099655629, lng: -22.26485424139211 },
],
[
{ lat: -47.70336262481528, lng: -22.26561084941619 },
{ lat: -47.70336542334331, lng: -22.26561213882109 },
{ lat: -47.70336596593334, lng: -22.26561211173161 },
{ lat: -47.70337969579747, lng: -22.26560034650085 },
{ lat: -47.70336262481528, lng: -22.26561084941619 },
],
],
};
我没有办法一个一个地更改这些数据,我的坐标原始文件将近八千行,所以我需要一个自动执行此操作的功能。
谢谢!!
您必须使用循环函数映射该数据。由于在这里您需要遍历多个数组,因此我建议使用 reduce 函数。
如果你不知道什么是 reduce 函数,你应该先看看这里:https://www.w3schools.com/jsref/jsref_reduce.asp
基本上,您遍历每个元素并更改值。这是一个小例子,您可能需要根据需要进行调整:
const newCoordinates = coordinates.reduce((acc, curr) => {
const newCoordiantes = curr[0].map((coord) => ({
lat: coord[0],
lng: coord[1]
}));
acc.push([newCoordiantes]);
return acc;
}, []);
这是一个工作示例:https://codesandbox.io/s/sharp-cloud-nfx4k?file=/src/index.js
假设它是一个数组数组,您可以使用函数 reduce
和函数 map
来构建所需的输出。
let arr = [ [ [ [-47.7027099655629, -22.26485424139211], [-47.70271526762656, -22.26487408404245], [-47.70272860122938, -22.26486817968162], [-47.70275769033151, -22.26485486960603], [-47.7027803963492, -22.26483968832534], [-47.7027099655629, -22.26485424139211] ] ], [ [ [-47.70336262481528, -22.26561084941619], [-47.70336542334331, -22.26561213882109], [-47.70336596593334, -22.26561211173161], [-47.7033695288571, -22.2656092720629], [-47.70337969579747, -22.26560034650085], [-47.70336262481528, -22.26561084941619] ] ]];
let coords = {
coords: arr.reduce((a, [c]) => a.concat([c.map(([lat, lng]) => ({lat, lng}))]), [])
};
console.log(coords);
.as-console-wrapper { max-height: 100% !important; top: 0; }
可以使用map
方法。您似乎在彼此之间有 3 层数组,最后您有一个 [lat, lng]
的数组,您想要将其更改为 { lat, lng }
,但似乎您有一层只包含一个sub-element 你想把它弄平。因此,您可以级联两个 map
调用(其中一个调用隐式解构 single-element 数组),如下所示:
const convert = arr => arr.map(([group]) => group.map(([lat, lng]) => ({ lat, lng })))
const inputData = [[[[-47.7027099655629,-22.26485424139211],[-47.70271526762656,-22.26487408404245],[-47.70272860122938,-22.26486817968162],[-47.70275769033151,-22.26485486960603],[-47.7027803963492,-22.26483968832534],[-47.7027099655629,-22.26485424139211]]],[[[-47.70336262481528,-22.26561084941619],[-47.70336542334331,-22.26561213882109],[-47.70336596593334,-22.26561211173161],[-47.7033695288571,-22.2656092720629],[-47.70337969579747,-22.26560034650085],[-47.70336262481528,-22.26561084941619]]]]
const outputData = convert(inputData)
console.log(outputData)
.as-console-wrapper { max-height: 100% !important; top: 0; }
请注意,您显示的输入数据的格式为 [...], [...]
,它本身并不是一个完整的数据结构(它将是两个由逗号运算符连接的数组,这没有多大意义) .我猜应该有一个围绕它的外部数组 ([[...], [...]]
),我在我的示例中添加了它(否则它不会工作)。