JavaScript array details
- 2020-03-26 21:20:43
- OfStack
Array in the programming language of the importance of self-evident, array is also one of the most commonly used objects in JavaScript, an ordered set of value is an array, because of the weak type, JavaScript arrays is very flexible and powerful, not strongly typed arrays in a high-level language such as Java can only store the same type or its child elements, JavaScript in the same array can deposit a variety of types of elements, and it is also can dynamically adjust length, can increase or decrease as the data automatically to do change the array length.
Create an array
Arrays are created in various ways in JavaScript
The constructor
1. No arguments constructor to create an empty array
var a1=new Array();
2. A numeric parameter constructor that specifies the length of the array (which is not significant because it can be dynamically adjusted) to create an array of the specified length
var a2=new Array(5);
3. Constructor with initialization data, creates an array and initializes the parameter data
var a3=new Array(4,'hello',new Date());
literal
1. Using square brackets to create an empty array is equivalent to calling the argument free constructor
var a4=[];
2. Use the brackets and pass in the initialization data, which is equivalent to calling the constructor with the initialization data
var a5=[10];
Pay attention to the point
1. When using the constructor to create an array, if a numeric parameter is passed in, an array of length is created. If more than one parameter is passed in, an array is created and the parameter is added to the array as initialization data
var a1=new Array(5);
console.log(a1.length);//5
console.log(a1); //[], the array is empty
var a2=new Array(5,6);
console.log(a2.length);//2
console.log(a2); //[5,6]
However, with the literal approach, no matter how many parameters are passed in, the parameters are treated as the initialization content
var a1=[5];
console.log(a1.length);//1
console.log(a1); //[5]
var a2=[5,6];
console.log(a2.length);//2
console.log(a2); //[5,6]
2. When creating an array with initialization parameters, it is best not to end up with an extra ", "which is handled differently in different browsers
var a1=[1,2,3,];
console.log(a1.length);
console.log(a1);
This script works as expected on modern browsers, with a length of 3, but in lower versions of IE it does have a length of 4, and the last item is undefined
The index and length of an array
The values of an array can be read and written by accessing the natural number index, and the subscript can be a variable or expression that yields a non-negative integer
var a1=[1,2,3,4];
console.log(a1[0]); //1
var i=1;
console.log(a1[i]); //2
console.log(a1[++i]); //3
Arrays are also objects, and the secret to using an index is that the array converts the index value to the corresponding string (1=> 1 ") as the object property name
The console. The log (1 in a1); //true is really an attribute
The special thing about indexing is that the array automatically updates the length property, and of course because JavaScript syntax dictates that Numbers cannot be used as variable names, we cannot display them in a format like array.1. So negative Numbers and even non-numeric "indexes" are allowed, but these become attributes of an array instead of an index
var a=new Array(1,2,3);
a[-10]="a[-10]";
a["sss"]="sss";
< img border = 0 title = image height = 170 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009442.png" width = 352 border = 0 >
So we can see that all of the indexes are property names, but only the natural number (which has a maximum) is the index, and in general we don't have array overbounds when we're using an array and that's why the index of the array can be non-contiguous and return undefined when we're accessing elements that don't exist at index
var a=new Array(1,2,3);
a[100]=100;
console.log(a.length); //101
console.log(a[3]); //undefined
console.log(a[99]); //undefined
console.log(a[100]); 100
< img border = 0 title = image height = 205 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009443.png" width = 335 border = 0 >
Although the above example, the direct and assign a [100] will not affect a [4] or [99], but the length of the array, the array length attribute is equal to the array's largest index + 1, we know that the array length is also a writable attribute, when forced to array length attribute value is set to less than or equal to the maximum index value, the array will be deleted automatically indexd greater than or equal to the length of data, add a few words in the code just now
a.length=2
console.log(a);//[1,2]
A [2] and a[100] are automatically deleted. Similarly, if the length is set to be greater than the maximum index+1 value, the array will automatically expand, but no new elements will be added to the array, just empty space will be appended to the end
a.length=5;
console.log(a); //[1,2] // No back 3 a undefined
Element add/remove
Basic method
The above example already USES the method of adding elements to an array, just use the index (index does not have to be continuous)
var a=new Array(1,2,3);
a[3]=4;
console.log(a);//[1, 2, 3, 4]
As mentioned earlier, an array is an object, and an index is just a special attribute, so we can delete an array element by deleting an object attribute using delete
delete a[2];
console.log(a[2]); //undefined
This is similar to assigning a[2] to undefined. It does not change the length of the array, nor does it change the index and value of other data
< img border = 0 title = image height = 161 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009444.png" width = 267 border = 0 >
The stack method
var a=new Array(1,2,3);
a.push(4);
console.log(a);//[1, 2, 3, 4]
console.log(a.length);//4
console.log(a.pop(a));//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3
Queue method
Since all the stack methods are implemented, how can there be fewer first-in, first-out queues? The shift method can delete the smallest element of the array index, and make the subsequent elements index minus one, and length minus one, so the use of shift/push can simulate the queue. Of course, there is an unshift method corresponding to the shift method, which is used to add an element to the array head
var a=new Array(1,2,3);
a.unshift(4);
console.log(a);//[4, 1, 2, 3]
console.log(a.length);//4
console.log(a.shift(a));//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3
The ultimate artifact
JavaScript provides a splice method for dealing with array additions and deletions all at once (the two methods can be combined to achieve the substitution effect), with three arguments
1. Start indexing
2. Remove element displacement
3. Insert new elements, of course, you can also write more than one
The splice method returns a new array of deleted elements, and an empty array if there is no deletion
var a=new Array(1,2,3,4,5);
delete
Specifying the first two parameters, you can use splice to delete array elements, which also results in index adjustments and length adjustments
var a=new Array(1,2,3,4,5);
console.log(a.splice(1,3));//[2, 3, 4]
console.log(a.length);//2
console.log(a);//[1,5]
If the array index doesn't start at 0, then the result is interesting, there's an array like this
var a=new Array();
a[2]=2;
a[3]=3;
a[7]=4;
a[8]=5;
< img border = 0 title = image height = 132 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009445.png" width = 209 border = 0 >
console.log(a.splice(3,4)); //[3]
console.log(a.length); //5
console.log(a); //[2: 2, 3: 4, 4: 5]
< img border = 0 title = image height = 86 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009446.png" width = 165 border = 0 >
As you can see from the above example, the first parameter of splice is the absolute index value, not relative to the array index, and the second parameter is not the number of deleted elements, but the number of times the delete action is performed, not by the actual index of the array, but continuously. At the same time, adjust the index of the next element, leaving the previous index out of the way
Insert and replace
As long as the second parameter of the method, which is the number of times the delete action is executed, is set to 0, the third parameter and later fill in the content to be inserted, splice can perform the insert operation, and if the second parameter is not 0, it becomes the first place to delete and then insert, which is the substitution effect
var a=new Array(1,2,3,4,5);
a.splice(1,0,9,99,999);
console.log(a.length); //8
console.log(a);//[1, 9, 99, 999, 2, 3, 4, 5]
a.splice(1,3,8,88,888);
console.log(a.length);//8
console.log(a);//[1, 8, 88, 888, 2, 3, 4, 5]
Commonly used method
The join (char)
This method, also used in languages like C#, concatenates an array element (the object calls its toString() method) into a string using arguments as concatenators
var a=new Array(1,2,3,4,5);
console.log(a.join(',')); //1,2,3,4,5
console.log(a.join(' ')); //1 2 3 4 5
slice(start,end)
Not to be confused with the splice method, slice
var a=new Array(1,2,3,4,5);
console.log(a); //[1, 2, 3, 4, 5]
console.log(a.slice(1,2));//
console.log(a.slice(1,-1));//[2, 3, 4]
console.log(a.slice(3,2));//[]
console.log(a); //[1, 2, 3, 4, 5]
Method used in the returned array a fragment or subarray, if only write a parameters returned to the end of the array part, if the parameters appear negative, the tail counting from the array (3 mean array and the third, the average person will not do that, but I don't know the length of the array, want to give up some, with n, after but the array length is very good... If start > end returns an empty array, it is worth noting that slice returns a new array instead of changing the original array.
Concat (array)
The concat method is used to concatenate arrays, and a.concat(b) returns a new array of a and b, again without modifying any of the original arrays, and without recursively concatenating internal arrays
var a=new Array(1,2,3,4,5);
var b=new Array(6,7,8,9);
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
reverse()
The inorder () method is used to reverse an array, but it changes the original array
var a=new Array(1,2,3,4,5);
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
Also, when the array index is not continuous or starts at 0, the result needs to be noted
The same code at the page code block index 19
< img border = 0 title = image height = 132 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009445.png" width = 209 border = 0 >
a.reverse();
< img border = 0 title = image height = 138 Alt = image SRC = "/ / files.jb51.net/file_images/article/201310/201310102009447.png" width = 217 border = 0 >
sort
Sort method is used to sort an array, when no parameters according to the alphabet ascending sort, if contain undefined will be to the end, the object element will call the toString method, if you want to order, according to the definition of himself can pass a sorting method, typical strategy pattern, also will change the original array sort.
var a=new Array(5,4,3,2,1);
a.sort();
console.log(a);//[1, 2, 3, 4, 5]
But...
var a=new Array(7,8,9,10,11);
a.sort();
console.log(a);//[10, 11, 7, 8, 9]
Because 7 is bigger than 10 in alphabetical order, we need to pass in our custom sort function
var a=new Array(7,8,9,10,11);
a.sort(function(v1,v2){
return v1-v2;
});
console.log(a);//[7, 8, 9, 10, 11]
The principle is similar to the sort in C# (the design pattern in the.net Framework -- the application policy pattern sorts the List), except that you can pass the method in directly
Sort internally USES quicksort. If there are no parameters when comparing the size of two elements, the alphabet is directly determined. If there are parameters, the two parameters being compared are passed into the custom method and called (the two Numbers being compared will be passed to v1 and v2 of the custom method). V2, if equal to 0, means v1 is equal to v2, if less than 0, means v1< V2, actually the way we passed it in was to tell sort how to compare the two elements which are bigger and which are smaller, and as for sort moving the elements they wrote it down, end of guessing.
The last
It's great to see that arrays are powerful and flexible, but there are also some inconveniences in traversing elements and getting their locations, which have been addressed in ECMAScript, and proficiency in using them can make our JavaScript elegant and efficient.