JavaScript数组

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

创建和初始化数组。使用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);
时间: 2024-10-23 00:20:35

JavaScript数组的相关文章

javascript 数组的深度复制

javascript 数组的深度复制 一般情况下,使用 "=" 可以实现赋值.但对于数组.对象.函数等这些引用类型的数据,这个符号就不好使了. 1. 数组的简单复制 1.1 简单遍历 最简单也最基础的方式,自然是循环处理.示例: function array_copy(arr) { var out = [], i, len; if (out[i] instanceof Array === false){ return arr; } for (i = 0, len = arr.lengt

[前端JS学习笔记]JavaScript 数组

一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {"json:":"666"}]; console.log(arr.length); 二.JavaScript 数组的两种声明 1.var arr = [元素]; var arr = ["坚持"]; 2.new Array(); 或者 var arr2 =

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

JQuery $.each遍历JavaScript数组对象实例

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana&q

JavaScript数组方法对比(深度学习数组)

JavaScript数组方法对比 众所周知,JavaScript提供了许多对数组进行改变的方法,但是有些会对原数组进行影响,有些不会.下边就列举出来. 一.新增 影响原数组 array.push()  //向数组的末尾添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]; array.push(6); // [1,2,3,4,5,6]; array.unshift() //向数组的开头添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]

javascript数组顺序-----1冒泡的另一种比较好理解的写法

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组冒泡排序法</title> 6 </head> 7 <body> 8 <script> 9 var array = [7, 9, 22, 11, 12, 13, 5, 4, 3,

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----5

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----3

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5