Javascript数组删除奇怪的逗号

时间:2018-03-08 09:37:31

标签: javascript arrays

我需要创建一个这样的字符串,以使地图服务器请求工作:

filterobj = "POLYGON((507343.9 182730.8, 507560.2 182725.19999999998, 507568.60000000003 182541.1, 507307.5 182563.5, 507343.9 182730.8))";

如果数字是多边形的地图坐标x y,问题在于Javascript和OpenLayer我所拥有的是一个数字数组,如何只删除ODD逗号(首先,第三,第五......)?

目前我已经用这种方式创建了字符串:

filterobj = "POLYGON((" +  
Dsource.getFeatures()[0].getGeometry().getCoordinates() + " ))";

结果是:

POLYGON((507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8));

这几乎是我需要的,但是,我需要从Dsource.getFeatures()[0].getGeometry().getCoordinates()数组中删除ODD逗号以使请求有效,我该怎么做?

5 个答案:

答案 0 :(得分:2)

您需要的格式是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...

答案 1 :(得分:0)

这个怎么样:

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"

答案 2 :(得分:0)

有两种方法可去,都涉及首先摆脱空白。第一个匹配坐标对,删除逗号,然后将它们粘贴在一起。

第二个分成单个数字,然后用reduce格式化它们。两者都应该是ECMA-262 ed5(2011)兼容,但我没有足够的浏览器来测试它们。



var s = '507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8';
var re = /\d+\.?\d*,\d+\.?\d*/g;
  
// Solution 1
var x = s.replace(/\s/g,'').match(re).map(function(x){return x.replace(',',' ')}).join();
console.log(x);

// Solution 2
var t = s.replace(/\s/g,'').split(',').reduce(function (acc, v, i) {
  i%2? (acc[acc.length - 1] += ' ' + v) : acc.push(v);
  return acc;
}, []).join(',');

console.log(t);




答案 3 :(得分:0)

查看代码段:

帮助方法:setCharAt, 拿所有逗号, 用i%2 == 0

取所有可能的逗号

// I need to start from somewhere
function setCharAt(str,index,chr) {
    if(index > str.length-1) return str;
    return str.substr(0,index) + chr + str.substr(index+1);
}

var POLYGON = [507343.9, 182730.8,507560.2, 182725.19999999998, 507568.60000000003, 182541.1, 507307.5, 182563.5,507343.9, 182730.8];

var REZ = "";
REZ = POLYGON.toString();

var all_comma = [];

for(var i=0; i<REZ.length;i++) {
  if (REZ[i] === ",") all_comma.push(i);
}

for(var i=0; i<all_comma.length;i++) {
  if (i % 2 == 0 ) {
    REZ = setCharAt(REZ,all_comma[i],' ');
  }    
}

console.log(REZ);

// let return nee element intro POLYGON

// reset
POLYGON = REZ.split(',');

console.log(POLYGON);

答案 4 :(得分:0)

一种方法是使用Array.reduce()

var input = '1.0, 2.0, 3.0, 4.0, 5.0, 6.0';

var output = input
  .split(',')
  .reduce((arr, num, idx) => { 
     arr.push(idx % 2 ? arr.pop() + ' ' + num : num);
     return arr;
   }, [])
  .join(',');

// output = '1.0 2.0, 3.0 4.0, 5.0 6.0'