12

I have an array:

data.Dealer.car[0]
data.Dealer.car[1]
data.Dealer.car[2]

If I do this:

alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);

It gives me the same count each time. Does the removed element still exist?

3
  • possible duplicate of JavaScript Array Delete Elements Commented Apr 30, 2015 at 17:05
  • @JarrodRoberson — It doesn’t seem to be an exact duplicate. The question you linked is asking for the differences between delete and Array.prototype.splice, whereas this question is basically asking why deleting an element from an array (thus making it sparse) won’t reduce its length. Commented Mar 3, 2018 at 17:18
  • I've edited the question to make it clearer. Commented Mar 3, 2018 at 17:31

6 Answers 6

20

If you want to remove an item, use the splice method:

alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);

But notice that the indices have changed.

Sign up to request clarification or add additional context in comments.

Comments

14

JavaScript arrays aren't sparse, if you have a 0 and a 2, then element 1 must exist. Meaning the length is going to be 3.

5 Comments

Yeah, and the element 2 will be undefined .
What happens when you delete something at the last index in the array?
The length will be untouched if you delete the last element. You can set the length to shrink the array to any size you want.
Yes, JavaScript arrays can, in fact, be sparse.
JS arrays can be sparse. Sparse arrays are arrays that have one or more uninitialized elements. For example let arr = ['foo' , , 'bar'] is a sparse array, so it has length 3, even though arr[1] does not have a value.
5

Array.shift() would remove the first item from the array and make it shorter. Array.pop() will remove the last item.

Comments

5

Building on what @Ray Hidayat posted:

JavaScript arrays are sparse. If you have an array of length 3, deleting the reference at [1] will simply "unset" that item, not remove it from the array, or update that array's length. You could accomplish the same with

myArray = [0, , 2, , , , ];  // length 6; last three items undefined

Here's a Fiddle: http://jsfiddle.net/WYKDz/

NOTE: removing items from the middle of large arrays can be computationally intensive. See this post for more info: Fastest way to delete one entry from the middle of Array()

2 Comments

That's not what sparse means.
@DaraJavaherian: That is what sparse means. (No? At least say what your definition of it is…)
2

I think you're looking for this:

var arr = [0,1,2,3,4];

alert( arr.splice( 2, 1 ) ); // alerts 2, the element you're removing
alert( arr ) // alerts 0,1,3,4  - the remaining elements

here's a MDC reference

Comments

0

Ok.. fixed this now as the array was still allocated.

I needed to basically do:

var newCar = new Array();
for (i = 0 ; i < tblSize -2; i ++)
{
    newCar[i]=data.Dealer.car[i];
}
data.Dealer.car = newCar;

1 Comment

You want to remove the last item? Just use: data.Dealer.car.pop();

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.