我想知道为什么我收到错误消息(Uncaught TypeError:number不是函数),这是我的代码:
<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');
答案 0 :(得分:4)
(30.40545181622765, -9.582610613708539)
评估为-9.582610613708539
与下一行一起,它被解释为
-9.577975756530805(30.405229737948233, -9.577975756530805)
当然失败了因为-9.577...
不是函数。
答案 1 :(得分:1)
dataparse
函数需要一个字符串,给定points.substr(0,points.length - 1)
(num1, num2) (num3, num4)
作为函数执行(请参阅GGG的答案)。答案 2 :(得分: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);
答案 3 :(得分: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;
}
答案 4 :(得分: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/
答案 5 :(得分:0)
第一次失误:
var cd = [
(30.40545181622765, -9.582610613708539)
(30.405229737948233, -9.577975756530805)
(30.40300892737293, -9.577546603088422)
(30.402268645956614, -9.584241396789594)
];
Javascript数组必须用逗号分隔,而不是用换行符分隔!
答案 6 :(得分: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
的值,从而为x
和{{ 1}}坐标。