如何将数组中的所有元素作为一个变量分别放置

时间:2019-05-07 13:33:33

标签: javascript arrays coordinates

我有一个像这样的数组(它是动态创建的,所以长度是可变的):

var coord_list = [[-7.84 , 12.32],[-8.30 , 10.42],[-11.84 , 12.32]....]

问题是我需要将每个元素(坐标)"[-7.84 , 12.32]"放入一个草皮模块中,即:

turf.lineString([[-7.42,9.125],[-8.43,9.800]]...(all of them), {name: 'line 2'});

我尝试直接放置var coord_list数组,但是即使内部结构相同也无法正常工作。

turf.lineString([coord_list], {name: 'line 2'}); --> Gives the Error: coordinates must be an array of two or more positions
turf.lineString(coord_list, {name: 'line 2'}); --> Gives the Error: coordinates must contain numbers       

如何将每一个放入草皮公式中?

2 个答案:

答案 0 :(得分:0)

从显示错误的编辑中,我认为创建coord_list时,实际上是将您的坐标添加为字符串而不是数字。

答案 1 :(得分:0)

根据turf documentation,语法示例为:

var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});

也就是说,第一个参数是位置数组。

所以您的第二行似乎正确:

var coord_list = [[-7.84 , 12.32],[-8.30 , 10.42],[-11.84 , 12.32]....] // is an array of positions
turf.lineString(coord_list, {name: 'line 2'}); --> Gives the Error: coordinates must contain numbers

从错误消息中,您似乎动态生成的coord_list具有字符串而不是数字

要对此进行测试,可以控制台记录每个位置值的类型。

要将每个值转换为数字,请将每个位置的x,y值传递给:

let xNum = parseFloat(x);
let yNum = parseFloat(y);

在将它们送入turf.lineString([[xNum, yNum],[xNum2, yNum2],...],{name: 'line 2'})

之前

如果您无法控制coord_list的生成方式,则可以像这样进行修复:

let arr = [['-7.84' , '12.32'],['-8.30' , '10.42'],['-11.84' , '12.32']];

let coord_list = arr.map(position => {
    return [parseFloat(position[0]), parseFloat(position[1])];
})