Javascript - 推送(String Array.split(“,”)不工作或循环不

时间:2013-08-21 01:19:55

标签: javascript string split

我在以下配置中从我的数据库返回了可变数量的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)无效

3 个答案:

答案 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;
}