0

我想知道为什么我收到错误消息 (Uncaught TypeError: number is not a function) ,这是我的代码:

<script type = "text/javascript">
  function dataparse(points)
   {
      points = points.substr(0, points.length - 1);
      var linar = points.split("\n");
      // Break each point by line break
      var wrkar = [];
      var pntar = [];
      for (var i = 0; i < linar.length; i++)
      {
          wrkar = linar[i].split(",", 2);
          // Break each point into x and y
          pntar.push(new google.maps.LatLng(parseFloat(wrkar[0]), parseFloat(wrkar[1])));
      }
      return pntar;
  }


  var cd = [
  (30.40545181622765, -9.582610613708539)
  (30.405229737948233, -9.577975756530805)
  (30.40300892737293, -9.577546603088422)
  (30.402268645956614, -9.584241396789594)
  ];

  var df = dataparse(cd);
  alert('df');
4

7 回答 7

4

(30.40545181622765, -9.582610613708539)评估为-9.582610613708539

连同下一行,它被解释为

-9.577975756530805(30.405229737948233, -9.577975756530805)

这当然失败了,因为-9.577...它不是一个函数。

于 2012-05-06T10:20:48.403 回答
1
  1. 您的dataparse函数需要一个字符串,给定points.substr(0,points.length - 1)
  2. 您将 cd 初始化为一个数组,但解析器尝试(num1, num2) (num3, num4)作为一个函数执行(原因参见 GGG 的答案)。
于 2012-05-06T10:22:48.900 回答
0

由于cd变量而引发错误。您使用括号,但它是不正确的。按照您的dataparse方法cd变量应该如下所示:

var cd = "30.40545181622765, -9.582610613708539\n"+
    "30.405229737948233, -9.577975756530805\n"+
    "30.40300892737293, -9.577546603088422\n"+
    "30.402268645956614, -9.584241396789594";

更新:但是,您可以以更漂亮的形式重写代码:

function dataparse(points) {
    var pntar = [];
    for (var i = 0; i < points.length; i++) {
        pntar.push(new google.maps.LatLng(points[i][0], points[i][1]));
    }
    return pntar;
}

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
    ];

var df = dataparse(cd);
alert(df);
于 2012-05-06T10:14:13.343 回答
0

您的点数组无效。您必须对点本身使用方括号并用逗号分隔它们

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
];

并且您还必须修改(简化)您的dataparse函数以正确处理数组

function dataparse(points) {
    var i,
        length,
        pntar = [];

    for (i = 0, length = points.length; i < length; i++) {
        pntar.push(new google.maps.LatLng(points[i][0], points[i][1]));
    }

    return pntar;
}
于 2012-05-06T10:23:27.223 回答
0

你得到了这个,因为括号中的每个数字都被评估,你应该用你的函数接受的正确参数替换它......因为你正在使用substr,但实际上你想传递一个数组,你应该向你的函数添加一些代码以及:

function dataparse(pairs)
{
    for ( i=0; i < pairs.length ; i++ ) {
       var wrkar = pairs[i].split(", ",2);
       var pntar = [] ;
       pntar.push( new google.maps.LatLng(parseFloat(wrkar[0]), parseFloat(wrkar[1])) ); 
       return pntar;
    }    
}


var cd = [
        "30.40545181622765, -9.582610613708539",
        "30.405229737948233, -9.577975756530805",
        "30.40300892737293, -9.577546603088422",
        "30.402268645956614, -9.584241396789594"
];

var df = dataparse(cd);
alert('df');​

这是一个 jsfiddle http://jsfiddle.net/ptQfc/

于 2012-05-06T10:23:38.010 回答
0

第一个错误:

var cd = [
            (30.40545181622765, -9.582610613708539)
(30.405229737948233, -9.577975756530805)
(30.40300892737293, -9.577546603088422)
(30.402268645956614, -9.584241396789594)
];

Javascript 数组必须用逗号而不是换行符分隔!

于 2012-05-06T10:25:44.087 回答
0

您误解了所需的语法,它导致了一大堆错误,即试图将您的变量解释为一个函数。

在 Javascript 中,var=[val,val2]构造创建一个数组。您正在尝试将括号的内容视为字符串,并将其拆分。

存储数组的更好方法是:

var cd = [
    [30.40545181622765, -9.582610613708539],
    [30.405229737948233, -9.577975756530805],
    [30.40300892737293, -9.577546603088422],
    [30.402268645956614, -9.584241396789594]
];

然后你的函数可以写成:

function dataparse(linar) {
    var wrkar = [] ;
    var pntar = [] ;
    for (var i = 0; i < linar.length; i++) {
        wrkar = linar[i];                // Break each point into x and y
        pntar.push( new google.maps.LatLng(parseFloat(wrkar[0]),parseFloat(wrkar[1]))); 
    }
    return pntar ;
}    

linar数组数组一样,每次循环遍历数组时,它都会将下一个数组设置为 的值wrkar,从而为您提供xy坐标。

于 2012-05-06T10:30:20.857 回答