最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - array.splice not working - Stack Overflow

programmeradmin6浏览0评论

i want to remove array element, but giving error while using splice,

i m using following function with myAra as global var, but in console ,it is giving me an error, TypeError: myAra.splice is not a function

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);
    }
}

i want to remove array element, but giving error while using splice,

i m using following function with myAra as global var, but in console ,it is giving me an error, TypeError: myAra.splice is not a function

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);
    }
}
Share Improve this question asked Sep 27, 2012 at 13:01 Sunil LoharSunil Lohar 2,2424 gold badges31 silver badges46 bronze badges 2
  • Your loop would never be executed: the if-condition and the for-condition are never true both. – Bergi Commented Sep 27, 2012 at 13:14
  • Are you sure you don't just want to use .substr(0, 75)? – Bergi Commented Sep 27, 2012 at 13:18
Add a ment  | 

5 Answers 5

Reset to default 3

myAra is a String, not an Array, at the point when you call splice. It has the value of the element.

This is a nice example of why globals are EVIL, sure you declared the variable an array (badly): var myAra = Array() (I'll explain at the end what's bad about this), but later on:

myAra = $("#"+textAreaId).val();//returns a string, variable is now a string, not an array

You've reassigned a string to the array, so the variable now references a string constant, and cannot be used as an Array (not safely, in a X-browser way at least).

Array() is bad, why? Well, for starters, you're calling a constructor, but you're not using the new keyword. With arrays that's not a big problem (it'll return a new instance all the same), but when you start defining your own objects, and constructors, you'll find yourself up to your neck in globals.
Also, suppose you wanted an array and initialize the first element to an int: var anArray = new Array(2);, you won't get an array that looks like this: anArray[0] === 2, you'll get anArray === [undefined,undefined]. Compare that to var anArray('2') --> ['2']. Given the fact that JS is loosely typed, and you'll often use variables when initializing an array, it's hard to tell weather or not you're passing a numeric string or a number to the constructor.
The best way to initialize arrays is by using the literal notation: [2,3,4], as an added bonus, it requires less typing, too

Replace the following:

if(myAra.length>75)
{
    for (var i = 75; i >myAra.length; i++) 
    {
        myAra.splice(i, 1);

    }

    $("#"+textAreaId).val(myAra);
}

with the below code:

if(myAra.length>75)
{
    var moreNum = myAra.length - 75;
    myAra.splice(75, moreNum ); // remove all items after the 75th item

    $("#"+textAreaId).val(myAra);
}

Note - splice change the actual array, that's why the loop was failing. Hope it helps.

You are assigning a string value directly to the myAra so it will convert it to string ..typeOf myAra. Use myAra[0]=$("#"+textAreaId).val();...since javascript is a loosely coupled language

In the first line you used var myAra = Array(), but the jQuery val() function returns a string.

EDIT: Also I think the prefered way of creating arrays in JS is the var myArray = [], and not using the var myArray = new Array() expression.

发布评论

评论列表(0)

  1. 暂无评论