Javascript数组删除奇数逗号
我需要创建一个类似这样的字符串以使mapserver请求生效:Javascript数组删除奇数逗号,javascript,arrays,Javascript,Arrays,我需要创建一个类似这样的字符串以使mapserver请求生效: filterobj=“多边形((507343.9 182730.8,507560.2 182725.199999998,507568.6000000003 182541.1,507307.5 182563.5,507343.9 182730.8)) 如果数字是多边形的地图坐标xy,那么Javascript和OpenLayer的问题在于我得到的是一个数字数组,我如何删除奇数逗号(第一、第三、第五 目前,我已经以这种方式创建了字符串:
filterobj=“多边形((507343.9 182730.8,507560.2 182725.199999998,507568.6000000003 182541.1,507307.5 182563.5,507343.9 182730.8))代码>
如果数字是多边形的地图坐标x
y
,那么Javascript和OpenLayer的问题在于我得到的是一个数字数组,我如何删除奇数逗号(第一、第三、第五
目前,我已经以这种方式创建了字符串:
filterobj = "POLYGON((" +
Dsource.getFeatures()[0].getGeometry().getCoordinates() + " ))";
结果是:
多边形((507343.9182730.8507560.2182725.199999998、507568.6000000003、182541.1507307.5182563.5507343.9182730.8))代码>
这几乎是我所需要的,但是,我需要从Dsource.getFeatures()[0].getGeometry().getCoordinates()
数组中删除奇数逗号才能使请求生效,我该怎么做呢?这是怎么回事:
const str = Dsource.getFeatures()[0].getGeometry().getCoordinates()
// str = "1,2,3,4,5,6"
str.split(',').map((v, i) => {
return (i % 2) ? v : v + ','
}).join(' ')
// "1, 2 3, 4 5, 6"
有两种方法可以走,都需要先去掉空白。第一个匹配坐标对,删除逗号,然后将它们重新粘贴在一起
第二个拆分为单个数字,然后使用reduce对其进行格式化。两者都应该与ECMA-262 ed5(2011)兼容,但我没有足够旧的浏览器来测试它们
var s='507343.9182730.8507560.2182725.199999998、507568.6000000003、182541.1507307.5182563.5507343.9182730.8';
变量re=/\d+\.?\d*,\d+\.?\d*/g;
//解决方案1
var x=s.replace(/\s/g').match(re).map(函数(x){return x.replace(',','')).join();
控制台日志(x);
//解决方案2
变量t=s.replace(/\s/g',).split(',).reduce(函数(acc,v,i){
i%2?(附件[附件长度-1]+=''+v):附件推送(v);
返回acc;
}连接(“,”);
控制台日志(t)代码>查看代码片段:
帮助方法:setCharAt,
用逗号,
用i%2==0的所有赔率逗号
//我需要从某个地方开始
函数setCharAt(str、index、chr){
如果(index>str.length-1)返回str;
返回str.substr(0,索引)+chr+str.substr(索引+1);
}
var POLYGON=[507343.9182730.8507560.2182725.199999998、507568.6000000003、182541.1、507307.5182563.5507343.9182730.8];
var REZ=“”;
REZ=POLYGON.toString();
var all_逗号=[];
对于(var i=0;i一种方法是使用Array.reduce()
:
您需要的格式是WKT,OpenLayers附带了一个类,允许您轻松地将其几何图形解析为WKT,如下所示:
var wktFormatter = new ol.format.WKT();
var formatted = wktFormatter.writeFeature(Dsource.getFeatures()[0]);
console.log(formatted); // POLYGON((1189894.0370893013 -2887048.988883849,3851097.783993299...
最后的输出应该是什么?问题中的第一个字符串:filterobj=“POLYGON((507343.9 182730.8,507560.2 182725.199999998,507568.6000000003 182541.1,507307.5 182563.5,507343.9 182730.8));
因此,“1,2,3,4,5,6”应该变成“1,3,4,5,6”
?到目前为止你试过什么了吗?是的,没有,我什么都没试过,我在考虑join方法,但是我如何迭代数组并加入arr[0]arr[1],arr[2]arr[3]等等
?对于start,.getCoordinates()
返回什么?例如,如果你写alert(JSON.stringify),会显示什么(x.getCoordinates())
?它的方向是正确的,但有一个语法错误,似乎它甚至会删除逗号。没错,如果解决方案可以是ES5,它会更好,我与旧浏览器存在兼容性问题。我仍然有str。split不是一个函数字符串。split
在ES5中:还有map
你确定吗这Dsource.getFeatures()[0].getGeometry().getCoordinates()
返回一个字符串?如果不是,你可以删除拆分
函数如果多边形
是一个数组,那么这真的是解决这个问题的一种奇怪的方法。其他答案也是正确的,很好,但这是最简单的理解方法!好的@Groo我现在就修复多边形是数组!谢谢,我会把你的答案保存到未来的usag中e、 如果你是OpenLayers的专家,也许你可以帮我解决这个问题;)
var wktFormatter = new ol.format.WKT();
var formatted = wktFormatter.writeFeature(Dsource.getFeatures()[0]);
console.log(formatted); // POLYGON((1189894.0370893013 -2887048.988883849,3851097.783993299...