Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组删除奇数逗号_Javascript_Arrays - Fatal编程技术网

Javascript数组删除奇数逗号

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的问题在于我得到的是一个数字数组,我如何删除奇数逗号(第一、第三、第五 目前,我已经以这种方式创建了字符串:

我需要创建一个类似这样的字符串以使mapserver请求生效:

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...