码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript数组

时间:2015-11-01 22:56:23      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:

几乎所有编程语言原生支持数组类型。数组是最简单的一种数据结构。

创建和初始化数组。使用new关键字初始化数组,进一步可以将数组元素作为参数传递给构造器。其中使用数组的length属性,能够知道数组中存了多少个元素

var daysOfWeek = new Array(); 
var daysOfWeek = new Array(7); 
console.log(daysOfWeek.length);
var daysOfWeek = new Array(‘Sunday‘, ‘Monday‘, ‘Tuesday‘, ‘Wednesday‘, ‘Thursday‘, ‘Friday‘, ‘Saturday‘);

除此之外,也可以用[ ]指定即可,不加new关键字,利用for循环打印出数组里的每一个元素:

var daysOfWeek = [];
var daysOfWeek = [‘Sunday‘, ‘Monday‘, ‘Tuesday‘, ‘Wednesday‘, ‘Thursday‘, ‘Friday‘, ‘Saturday‘];
for (var i=0; i<daysOfWeek.length; i++){
    console.log(daysOfWeek[i]);
}

举个斐波那契(fibonacci)数列前20个数的栗子:

var fibonacci = []; 
fibonacci[1] = 1; 
fibonacci[2] = 1; 

for(var i = 3; i < 20; i++){
    fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; 
}

for(var i = 1; i<fibonacci.length; i++){ 
    console.log(fibonacci[i]);          
}

//or simply print with the array name
console.log(fibonacci);

添加和删除元素的方式:

var numbers = [0,1,2,3,4,5,6,7,8,9];
//add a new element to the numbers array
numbers[numbers.length] = 10;

在JavaScript当中,数组是可修改的对象。添加元素时,它会动态增长。这一点与C语言大为不同。

也可以用push方法,将元素添加到数组的末尾。如果插入的元素不在末尾而是在数组的开头,则将数组内的元素全部右移一位。

numbers.push(11);
numbers.push(12, 13);
//insert first position manually
for (var i=numbers.length; i>=0; i--){
    numbers[i] = numbers[i-1];
}

numbers[0] = -1;

也可以使用unshift方法直接在首部添加元素。

numbers.unshift(-2);
numbers.unshift(-4, -3);

就可以按照-4,-3,-2的顺序将这些元素依次插入到数组的首部。

删除数组元素

pop方法删除最靠后的元素。

numbers.pop();

如果是删除(覆盖)第一个元素,则按照向左移动一位的方法实现,数组的长度和之前是一样的,并且多了一个未定义(undefined)的元素。

for (var i=0; i<numbers.length-1; i++){//pay attention to the (length-1) for avoiding the overflow
    numbers[i] = numbers[i+1];
}

或者可以用shift方式实现对第一个元素的删除

numbers.shift();

或者可以用splice方法实现对指定索引处、指定数量的元素的删除。

numbers.splice(5,3);
numbers.splice(5,0,2,3,4);//from index 5 ,add 3 numbers
numbers.splice(5,3,2,3,4);//from index 5 ,delete then add 3 numbers

 多维数组,或者矩阵的存储结构。

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;

然后可以用循环嵌套的方式进行这些数据的检索。

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

再增加一维也没有关系。

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

数组合并

concat方法

var zero = 0;
var positiveNumbers = [1,2,3];
var negativeNumbers = [-3,-2,-1];
var numbers = negativeNumbers.concat(zero, positiveNumbers);

console.log(numbers);

这样就不必迭代每个数组中的元素。因为concat方法可以向一个数组传递数组、对象或者元素。数组将会按照该方法接收的参数的顺序连接指定的数组。

迭代器函数,reduce方法停止执行后,会返回一个累加器。

console.log(numbers.reduce(function(previous, current, index){
    return previous + current;
}));

some,every,forEach方法

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

map,filter方法,返回的都是数组。

var myMap = numbers.map(isEven);
var evenNumbers = numbers.filter(isEven);

搜索和排序

numbers.sort(function(a,b){return a-b;});//按照升序排列,以function作为参数传入sort
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
console.log(numbers.indexOf(10));
console.log(numbers.indexOf(100));
numbers.push(10);
console.log(numbers.lastIndexOf(10));
console.log(numbers.lastIndexOf(100));

indexOf,lastIndexOf分别返回与参数匹配的第一个元素的索引,以及与参数匹配的最后一个元素的索引。

输出数组为字符串

console.log(numbers.toString());
var numbersString = numbers.join(‘-‘);
console.log(numbersString);



JavaScript数组

标签:

原文地址:http://my.oschina.net/donngchao/blog/524651

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!