我想删除数组元素,但在使用splice时会出错,
我使用以下功能 使用myAra作为全局变量, 但在控制台中,它给了我一个错误,TypeError:myAra.splice不是一个函数
var myAra = Array();
function charCounts(e,textAreaId)
{
myAra = $("#"+textAreaId).val();
var countNewLines = stringOccurrences(myAra, "\n");
if(myAra.length>75)
{
for (var i = 75; i >myAra.length; i++)
{
myAra.splice(i, 1);
}
$("#"+textAreaId).val(myAra);
}
}
答案 0 :(得分:3)
myAra
时, String
是Array
,而不是splice
。它具有元素的价值。
答案 1 :(得分:1)
这是为什么全局变量 EVIL 的一个很好的例子,确定你将变量声明为一个数组(严重):var myAra = Array()
(我将在最后解释什么&#39 ;这很糟糕),但后来:
myAra = $("#"+textAreaId).val();//returns a string, variable is now a string, not an array
您已将字符串重新分配给数组,因此该变量现在引用字符串常量,并且不能用作数组(不安全,至少以X浏览器的方式)。
Array()
不好,为什么?好吧,对于初学者,您正在调用构造函数,但是您没有使用new
关键字。使用数组并不是一个大问题(它会同时返回一个新实例),但是当你开始定义自己的对象和构造函数时,你会发现自己处于领先地位。全局。
另外,假设你想要一个数组并将第一个元素初始化为int:var anArray = new Array(2);
,你就不会得到一个如下所示的数组:anArray[0] === 2
,你'得到anArray === [undefined,undefined]
。将其与var anArray('2')
- >进行比较[' 2&#39]。鉴于JS是松散类型的,并且您在初始化数组时经常使用变量,因此很难分辨天气,而不是将数字字符串或数字传递给构造函数。
初始化数组的最好方法是使用文字符号:[2,3,4]
作为额外的奖励,它也需要更少的输入
答案 2 :(得分:1)
替换以下内容:
if(myAra.length>75)
{
for (var i = 75; i >myAra.length; i++)
{
myAra.splice(i, 1);
}
$("#"+textAreaId).val(myAra);
}
使用以下代码:
if(myAra.length>75)
{
var moreNum = myAra.length - 75;
myAra.splice(75, moreNum ); // remove all items after the 75th item
$("#"+textAreaId).val(myAra);
}
注意 - splice
更改实际数组,这就是循环失败的原因。希望它有所帮助。
答案 3 :(得分:0)
您正在将字符串值直接分配给myAra,因此它会将其转换为字符串..typeOf myAra。使用myAra [0] = $(“#”+ textAreaId).val(); ...因为javascript是一种松散耦合的语言
答案 4 :(得分:0)
在第一行中您使用了var myAra = Array()
,但jQuery val()
函数返回一个字符串。
编辑:我认为在JS中创建数组的首选方法是var myArray = []
,而不使用var myArray = new Array()
表达式。