我在以下配置中从我的数据库返回了可变数量的lat和lon
lat,lon*lat,lon*lat,lon
等
所以我分开了*
,这是有效的。
然后我拆分,
,如果我打印出特定的阵列单元格,它似乎有效。
当我尝试做下面的事情时,一切都变得糟透了。
我打印时
cords[0, 0] + cords[0, 1] + "\r\n" + cords[1, 0] + cords[1, 1] + "\r\n" + cords[2, 0] + cords[2, 1] + "\r\n"
等每一行都有相同的lat和lon
41.47033705-81.93612862
41.47033705-81.93612862
41.47033705-81.93612862
41.47033705-81.93612862
...
我昨晚彻夜整理了这件事,然后今晚几个小时,我似乎无法找到错误。
var cords = [];
var response = xmlhttp.responseText;
var locs = response.split("*");
for(var len = 0; len < locs.length; len++)
{
var temp = String(locs[len]).split(",");
if (temp.length > 1)
cords.push(temp[0],temp[1]);
}
我也尝试了cords.push(temp)
无效
答案 0 :(得分:3)
如果你想要二维数组,你需要使用:
cords.push([temp[0],temp[1]]);
代替然后将其作为cords[0][0]
等处理。这样,你就有了一个N个元素的数组,每个元素都是一个恰好包含2个元素的数组。
解释为什么您的代码不起作用:
cords[2, 1]
表达式被视为具有cords
索引的2, 1
数组的访问权限。而2, 1
是带逗号运算符的2个数字。逗号运算符返回传递的最后一个操作数。因此,2, 1
实际上等于1
,因此cords[2, 1]
转到cords[1]
答案 1 :(得分:0)
<script>
var locs = "lat1,lon1*lat2,lon2*lat3,lon3";
var arr = locs.split("*");
var cords = new Array();
for (var i=0;i<arr.length;i++){
var x = arr[i].split(",");
cords.push(x);
}
//test
for (var i=0;i<cords.length;i++){
document.write(cords[i][0]+" "+cords[i][1]+"<br/>");
}
</script>
答案 2 :(得分:0)
我的方法......每个数组都包含纬度和经度。 http://jsfiddle.net/techsin/HWhMY/
var s = 'lat,lon*lat,lon*lat,lon';
var cords = makeArr(s);
console.log(cords[0][1]);
function makeArr() {
var g = 0, arr = [],
n = s.replace(/,|\*/g, ' ').split(' ').map(jn);
function jn(s) {
if (g<2) {
arr.push(s);
g++;
} if (g>1) {
g = 0, r = arr, arr = [];
return r;
}
}
n.forEach(function (e, i) {if (e == undefined) {n.splice(i, 1);}});
return n;
}