array.splice无效

时间:2012-09-27 13:01:27

标签: javascript jquery html textarea

我想删除数组元素,但在使用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);
    }
}

5 个答案:

答案 0 :(得分:3)

在您拨打myAra时,

StringArray,而不是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()表达式。