Array
var daysOfWeek = [];
var daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var daysOfWeek = new Array(); //{1}
var daysOfWeek = new Array(7); //{2}
console.log(daysOfWeek.length);
var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); //{3}
for (var i=0; i<daysOfWeek.length; i++){
console.log(daysOfWeek[i]);
}
//console.table(daysOfWeek);
//fibonacci numbers
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
var fibonacci = []; //{1}
fibonacci[1] = 1; //{2}
fibonacci[2] = 1; //{3}
for(var i = 3; i < 20; i++){
fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; ////{4}
}
for(var i = 1; i<fibonacci.length; i++){ //{5}
console.log(fibonacci[i]); //{6}
}
//instead of {5} and {6} we can simply use
console.log(fibonacci);
添加刪除
function printArray(myArray) {
for (var i=0; i<myArray.length; i++){
console.log(myArray[i]);
}
}
var numbers = [0,1,2,3,4,5,6,7,8,9];
//add a new element to the numbers array
numbers[numbers.length] = 10;
numbers.push(11);
numbers.push(12, 13);
//printArray(numbers);
//insert first position manually
for (var i=numbers.length; i>=0; i--){
numbers[i] = numbers[i-1];
}
numbers[0] = -1;
//printArray(numbers);
//using method unshift
numbers.unshift(-2);
//printArray(numbers);
numbers.unshift(-4, -3);
//printArray(numbers);
//**** Removing elements
numbers.pop();
//remove first position manually
/*for (var i=0; i<numbers.length; i++){
numbers[i] = numbers[i+1];
}*/
printArray(numbers);
console.log(numbers.length);
//using method shift
numbers.shift();
printArray(numbers);
console.log(numbers.length);
//**** Removing and Adding elements from the middle of the array or specific position
//splice method - parameter (index, howManyPositionsToBeRemoved, item1...itemX)
numbers.splice(5,3);
console.log('----');
printArray(numbers);
numbers.splice(5,0,2,3,4);
console.log('----');
printArray(numbers);
console.log('----');
numbers.splice(5,3,2,3,4);
printArray(numbers);
二維與多維數(shù)組
var averageTempDay1 = [72,75,79,79,81,81];
var averageTempDay2 = [81,79,75,75,73,72];
var averageTemp = [];
//same as
averageTemp[0] = [72,75,79,79,81,81];
averageTemp[1] = [81,79,75,75,73,72];
function printMatrix(myMatrix) {
for (var i=0; i<myMatrix.length; i++){
for (var j=0; j<myMatrix[i].length; j++){
console.log(myMatrix[i][j]);
}
}
}
printMatrix(averageTemp);
//same as
//day 1
averageTemp[0] = [];
averageTemp[0][0] = 72;
averageTemp[0][1] = 75;
averageTemp[0][2] = 79;
averageTemp[0][3] = 79;
averageTemp[0][4] = 81;
averageTemp[0][5] = 81;
//day 2
averageTemp[1] = [];
averageTemp[1][0] = 81;
averageTemp[1][1] = 79;
averageTemp[1][2] = 75;
averageTemp[1][3] = 75;
averageTemp[1][4] = 73;
averageTemp[1][5] = 72;
printMatrix(averageTemp);
//** Multidimensional Matrix
//Matrix 3x3x3 - Cube
var matrix3x3x3 = [];
for (var i=0; i<3; i++){
matrix3x3x3[i] = [];
for (var j=0; j<3; j++){
matrix3x3x3[i][j] = [];
for (var z=0; z<3; z++){
matrix3x3x3[i][j][z] = i+j+z;
}
}
}
for (var i=0; i<matrix3x3x3.length; i++){
for (var j=0; j<matrix3x3x3[i].length; j++){
for (var z=0; z<matrix3x3x3[i][j].length; z++){
console.log(matrix3x3x3[i][j][z]);
}
}
}
js數(shù)組方法參考
js數(shù)組中的常用方法總結(jié)
棧方法(后進(jìn)先出)
ArrayObj.push()方法
ArrayObj.pop()方法
ArrayObj.push():就是向數(shù)組末尾添加新的元素,返回的是數(shù)組新的長(zhǎng)度。
ArrayObj.pop():就是向數(shù)組中刪除數(shù)組最后一個(gè)元素并且返回該元素。如果數(shù)組為空就返回undefined。
隊(duì)列方法(先進(jìn)先出)
ArrayObj.shift()
ArrayObj.unshift()
ArrayObj.shift():方法用于把數(shù)組中的第一個(gè)元素刪除,并返回第一個(gè)元素的值。
如果數(shù)組是空的,則shift() 方法不進(jìn)行任何操作,返回undefined。請(qǐng)注意,該方法不創(chuàng)建新數(shù)組,而是直接修改原來的數(shù)組。該方法會(huì)改變數(shù)組的長(zhǎng)度。
ArrayObj.unshift() :該方法可把它的參數(shù)順序添加到數(shù)組的頭部。它直接修改了數(shù)組,而不是創(chuàng)建一個(gè)新的數(shù)組。返回的是新數(shù)組的長(zhǎng)度。
unshift()在IE6,IE7下,數(shù)據(jù)有添加成功,但返回值卻是undefined.
轉(zhuǎn)換方法
join()方法
join() 方法用于把數(shù)組中的所有元素放入一個(gè)字符串。元素是通過指定的分隔符進(jìn)行分隔的。返回一個(gè)字符串。
重排序方法
reverse()方法
sort()方法
reverse()方法會(huì)對(duì)反轉(zhuǎn)數(shù)組項(xiàng)的順序。
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values); //5,4,3,2,1
這里數(shù)組的初始值及順序是1、2、3、4、5。而調(diào)用數(shù)組的reverse()方法后,其值的順序變成了5、4、3、2、1。
sort()方法按升序排列數(shù)組——即最小的值位于最前面,最大的值排在最后面。為了實(shí)現(xiàn)排序,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到字符串,以確定如何排序。即使數(shù)組中的每一項(xiàng)都是數(shù)組,sort()方法比較的也是字符串,如下所示:
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5
這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接受一個(gè)比較函數(shù)作為參數(shù),以便我們指定那個(gè)值位于那個(gè)值的前面。
比較函數(shù)接受兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等,則返回0,如果第一個(gè)參數(shù)位于第二個(gè)之后則返回一個(gè)正數(shù)。以下就是一個(gè)簡(jiǎn)單的比較函數(shù):
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
這個(gè)比較函數(shù)可以使用于大多數(shù)數(shù)據(jù)類型,只要將其作為參數(shù)傳遞給sort()方法即可,如下面這個(gè)例子所示:
var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15
在將比較函數(shù)傳遞到sort()方法之后,數(shù)值仍然保持了正確的升序。當(dāng)然,也可以通過比較函數(shù)產(chǎn)生降序排序的結(jié)果,只要交換比較函數(shù)返回的值即可:
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values); //15,10,5,1,0
reverse()和sort()方法會(huì)返回值是經(jīng)過排序之后的數(shù)組。
對(duì)于數(shù)值類型或者其valueOf方法會(huì)返回?cái)?shù)值類型的對(duì)象類型,可以使用一個(gè)更簡(jiǎn)單的比較函數(shù)。這個(gè)函數(shù)只要用第二個(gè)值減第一個(gè)值即可:
function compare(value1, value2) {
return value2 - value1;
}
由于比較函數(shù)通過返回一個(gè)小于零、等于零或大于零的值來影響排序結(jié)果,因此減法操作就可以適當(dāng)處理所有情況。
操作方法
concat()方法
slice()方法
splice()方法
concat() 方法用于連接兩個(gè)或多個(gè)數(shù)組。
該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本。
<script type="text/javascript">
var a = [1,2,3];
document.write(a.concat(4,5));
</script>
輸出的結(jié)果:1,2,3,4,5
slice(start,end)方法
start 必需。規(guī)定從何處開始選取。如果是負(fù)數(shù),那么它規(guī)定從數(shù)組尾部開始算起的位置。也就是說,-1 指最后一個(gè)元素,-2 指倒數(shù)第二個(gè)元素,以此類推。
end 可選。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒有指定該參數(shù),那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。如果這個(gè)參數(shù)是負(fù)數(shù),那么它規(guī)定的是從數(shù)組尾部開始算起的元素。
返回值:返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。
splice() 方法用于插入、刪除或替換數(shù)組的元素
語法:arrayObject.splice(index,howmany,element1,.....,elementX)
index 必需。規(guī)定從何處添加/刪除元素。
該參數(shù)是開始插入和(或)刪除的數(shù)組元素的下標(biāo),必須是數(shù)字。
howmany 必需。規(guī)定應(yīng)該刪除多少元素。必須是數(shù)字,但可以是 "0"。
如果未規(guī)定此參數(shù),則刪除從 index 開始到原數(shù)組結(jié)尾的所有元素。
element1 可選。規(guī)定要添加到數(shù)組的新元素。從 index 所指的下標(biāo)處開始插入。
elementX 可選??上驍?shù)組添加若干元素。
返回值:如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。
說明:splice() 方法可刪除從 index 處開始的零個(gè)或多個(gè)元素,并且用參數(shù)列表中聲明的一個(gè)或多個(gè)值來替換那些被刪除的元素。
下面簡(jiǎn)要概括一下slice()與splice()方法
slice(start, end); slice()方法返回從參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個(gè)參數(shù),該方法返回起死和結(jié)束位置之間的項(xiàng),但不包括結(jié)束位置的項(xiàng)。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2); // green, blue, yellow, purple
console.log(colors3); // green, blue, yellow
splice()有刪除,插入,替換的功能
刪除
需要兩個(gè)參數(shù),要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);
console.log(colors); // greeen, blue
console.log(removed); // red
插入
需要三個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)
var colors = ["red", "green", "blue"];
var removed = colors.splice(1,0,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
console.log(removed); // 返回空
替換
需要三個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。
var colors = ["red", "green", "blue"];
var removed = colors.splice(1,1,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "blue"]
console.log(removed); // ["green"]
//*** contact
var zero = 0;
var positiveNumbers = [1,2,3];
var negativeNumbers = [-3,-2,-1];
var numbers = negativeNumbers.concat(zero, positiveNumbers);
console.log(numbers);
//console.log(numbers);
//*** every and some
var isEven = function (x) {
// returns true if x is a multiple of 2.
console.log(x);
return (x % 2 == 0) ? true : false;
};
var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
numbers.every(isEven); //is going to execute the function only once
console.log('---');
numbers.some(isEven); //is going to execute the function twice
numbers.forEach(function(x){
console.log((x % 2 == 0));
});
console.log(numbers.reverse());
//console.log('*** filter ***');
var evenNumbers = numbers.filter(isEven);
//console.log(evenNumbers);
console.log('*** map ***');
//console.log(numbers.map(isEven));
console.log(numbers.reduce(function(previous, current, index){
return previous + current;
}));
console.log(numbers.sort());
console.log(numbers.sort(function(a,b){
return a-b;
}));
function compare(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
// a must be equal to b
return 0;
}
console.log(numbers.sort(compare));
//Sorting objects
var friends = [
{name: 'John', age: 30},
{name: 'Ana', age: 20},
{name: 'Chris', age: 25}
];
function comparePerson(a, b){
if (a.age < b.age){
return -1
}
if (a.age > b.age){
return 1
}
return 0;
}
console.log(friends.sort(comparePerson));
var names =['Ana', 'ana', 'john', 'John'];
console.log(names.sort());
console.log(names.sort(function(a, b){
if (a.toLowerCase() < b.toLowerCase()){
return -1
}
if (a.toLowerCase() > b.toLowerCase()){
return 1
}
return 0;
}));
var names2 = ['Maève', 'Maeve'];
console.log(names2.sort(function(a, b){
return a.localeCompare(b);
}));
//*** toString
console.log(numbers.toString());
console.log(numbers.indexOf(10));
console.log(numbers.indexOf(100));
numbers.push(10);
console.log(numbers.lastIndexOf(10));
console.log(numbers.lastIndexOf(100));
var numbersString = numbers.join('-');
console.log(numbersString);
把數(shù)組內(nèi)容發(fā)送到服務(wù)器,或進(jìn)行編碼解碼,很有用
ES6
let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
//********** forEch using arrow functions
console.log('forEach using arrow functions');
numbers.forEach(x => {
console.log((x % 2 == 0));
});
//********** using for..of loop
console.log('using for..of loop');
for (let n of numbers) {
console.log((n % 2 == 0) ? 'even' : 'odd');
}
//********** Using the new ES6 iterator (@@iterator)
console.log('Using the new ES6 iterator (@@iterator)');
let iterator = numbers[Symbol.iterator]();
console.log(iterator.next().value); //1
console.log(iterator.next().value); //2
console.log(iterator.next().value); //3
console.log(iterator.next().value); //4
console.log(iterator.next().value); //5
//********** Array entries, keys and values
console.log('Array entries, keys and values');
console.log('Array.entries');
let aEntries = numbers.entries(); //retrieve iterator of key/value
console.log(aEntries.next().value); // [0, 1] - position 0, value 1
console.log(aEntries.next().value); // [1, 2] - position 1, value 2
console.log(aEntries.next().value); // [2, 3] - position 2, value 3
console.log('Array.keys');
let aKeys = numbers.keys(); //retrieve iterator of keys
console.log(aKeys.next()); // {value: 0, done: false } done false means iterator has more values
console.log(aKeys.next()); // {value: 1, done: false }
console.log(aKeys.next()); // {value: 2, done: false }
console.log('Array.values');
//let aValues = numbers.values();
console.log(aValues.next()); // {value: 1, done: false } done false means iterator has more values
console.log(aValues.next()); // {value: 2, done: false }
console.log(aValues.next()); // {value: 3, done: false }
//********** Using the from method
console.log('Using the from method');
let evens = Array.from(numbers, x => (x % 2 == 0));
console.log(evens);
let numbers2 = Array.from(numbers);
console.log(numbers2);
//********** Using Array.of
console.log('Using Array.of');
let numbers3 = Array.of(1);
let numbers4 = Array.of(1,2,3,4,5,6);
let numbersCopy = Array.of(...numbers4);
console.log(numbers3);
console.log(numbers4);
console.log(numbersCopy);
//********** Using the fill method
console.log('Using the fill method');
numbersCopy.fill(0);
console.log(numbersCopy);
numbersCopy.fill(2, 1);
console.log(numbersCopy);
numbersCopy.fill(1, 3, 5);
console.log(numbersCopy);
let ones = Array(6).fill(1);
console.log(ones);
//********** Using the copyWithin method
console.log('Using the copyWithin method');
let copyArray = [1, 2, 3, 4, 5, 6];
console.log(copyArray);
copyArray = copyArray.copyWithin(0, 3); //pos 3 value is copied to pos 0
console.log(copyArray);
copyArray = [1, 2, 3, 4, 5, 6];
copyArray = copyArray.copyWithin(1, 3, 5); //pos 3-4 values are copied to pos 1-2
console.log(copyArray);
//********** methods find and findIndex
console.log('methods find and findIndex');
function multipleOf13(element, index, array) {
return (element % 13 == 0) ? true : false;
}
console.log(numbers.find(multipleOf13));
console.log(numbers.findIndex(multipleOf13));
//********** EcmaScript 7: using the method includes
console.log('EcmaScript 7: using the method includes');
console.log(numbers.includes(15));
console.log(numbers.includes(20));
let numbers5 = [7,6,5,4,3,2,1];
console.log(numbers5.includes(4,5));
TypedArrays
let length = 5;
let int16 = new Int16Array(length);
let array16 = [];
array16.length = length;
for (let i=0; i<length; i++){
int16[i] = i+1;
}
console.log(int16);
//Int8Array();
//Uint8Array();
//Uint8ClampedArray();
//Int16Array();
//Uint16Array();
//Int32Array();
//Uint32Array();
//Float32Array();
//Float64Array();
http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/
http://www.i-programmer.info/programming/javascript/6135-javascript-data-structures-typed-arrays.html