JavaScript 数组

1. 数组是计算机编程世界里最常见的数据结构。任何一种编程语言都包含数组,只是形式上 略有不同罢了。

JavaScript数组的标准定义是:一个存储元素的线性集合(collection),元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。

JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串。


2. 创建数组

最简单的方式是通过 [] 操作符声明一个数组变量:

var numbers = [];

var numbers = new Array(); 

print(numbers.length); // 显示 0

同样,可以为构造函数传入一组元素作为数组的初始值:

var numbers = new Array(1,2,3,4,5); 

print(numbers.length); // 显示 5

可以只传入一个参数,用来指定数组的长度: 

var numbers = new Array(10);

print(numbers.length); // 显示 10

在脚本语言里很常见的一个特性是,数组中的元素不必是同一种数据类型,这一点和很多编程语言不同,如下所示:

var objects = [1, "Joe", true, null];

可以调用 Array.isArray() 来判断一个对象是否是数组,如下所示:

var numbers = 3;

var arr = [7,4,1776]; 

print(Array.isArray(numbers)); // 显示 false 

print(Array.isArray(arr)); // 显示 true


3. 读写数组

在一条赋值语句中,可以使用 [] 操作符将数据赋给数组,比如下面的循环,将 1~100 的

数字赋给一个数组:

var nums = []; 
for(vari=0;i<100;++i){
    nums[i] = i+1;
}

还可以使用 [] 操作符读取数组中的元素,如下所示:

var numbers = [1,2,3,4,5];

var sum = numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4];

print(sum); // 显示 15

如果要依次读取数组中的所有元素,使用 for 循环无疑会更简单:

var numbers = [1,2,3,5,8,13,21];
var sum=0;
for (var i = 0; i < numbers.length; ++i) {
    sum += numbers[i];
}
print(sum); // 显示 53

注意,这里使用数组的 length 属性来控制循环次数,而不是直接使用数字。JavaScript 中 的数组也是对象,数组的长度可以任意增长,超出其创建时指定的长度。length 属性反映 的是当前数组中元素的个数,使用它,可以确保循环遍历了数组中的所有元素。


4. 由字符串生成数组

调用字符串对象的 split() 方法也可以生成数组:

var sentence = "the quick brown fox jumped over the lazy dog";
var words = sentence.split(" ");
for (var i = 0; i < words.length; ++i) {
    print("word " + i + ": " + words[i]);
}
//该程序的输出为:
word 0: the
word 1: quick
word 2: brown
word 3: fox
word 4: jumped
word 5: over
word 6: the
word 7: lazy
word 8: dog


5. 浅复制和深复制

浅复制:当把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。当 你通过原引用修改了数组的值,另外一个引用也会感知到这个变化。

var nums = []; for(vari=0;i<100;++i){
        nums[i] = i+1;
     }
var samenums = nums;
nums[0] = 400; print(samenums[0]); // 显示 400


深复制,将 原数组中的每一个元素都复制一份到新数组中。可以写一个深复制函数来做这件事:

function copy(arr1, arr2) {
    for (var i = 0; i < arr1.length; ++i) {
        arr2[i] = arr1[i];
    }
}


6. 存取函数

JavaScript 提供了一组用来访问数组元素的函数,叫做存取函数,这些函数返回目标数组

的某种变体。

7. 查找数组元素 indexOf()

indexOf() 函数是最常用的存取函数之一,用来查找传进来的参数在目标数组中是否存在。 如果目标数组包含该参数,就返回该元素在数组中的索引;如果不包含,就返回 -1。

var names = ["David", "Cynthia", "Raymond", "Clayton", "Jennifer"];
var name = "Cynthia";
var position = names.indexOf(name);
console.log(position);


8. 数组转字符串 join() toString()

var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"];
var namestr = names.join();
console.log(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
namestr = names.toString();
console.log(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer


9. 组合截取字符串 concat() splice()

concat() 和 splice() 方法允许通过已有数组创建新数组。concat 方法可以合并多个数组

创建一个新数组,splice() 方法截取一个数组的子集创建一个新数组。

var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
var dmpDept = ["Raymond", "Cynthia", "Bryan"];
var itDiv = cis.concat(dmp);
console.log(itDiv);
itDiv = dmp.concat(cisDept);
console.log(itDiv);
//输出为:
Mike,Clayton,Terrill,Danny,Jennifer,Raymond,Cynthia,Bryan
Raymond,Cynthia,Bryan,Mike,Clayton,Terrill,Danny,Jennifer

 

splice() 方法从现有数组里截取一个新数组。该方法的第一个参数是截取的起始索引,第 二个参数是截取的长度。下面的程序展示了 splice() 方法的工作原理:

var itDiv = ["Mike","Clayton","Terrill","Raymond","Cynthia","Danny","Jennifer"];
var dmpDept = itDiv.splice(3,3);
var cisDept = itDiv;
print(dmpDept); // Raymond,Cynthia,Danny
print(cisDept); // Mike,Clayton,Terrill,Jennifer

 

《数据结构与算法JavaScript描述》第二章

 

 

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
JavaScript document 对象
WordPress 自定义文章类型
WordPress 使用 shortcode() 增加编辑器功能
Express 使用 cookie-parser 处理 cookies
JavaScript 滚动浏览器窗口到指定的元素
JavaScript 使用 html2canvas 生成图片
JavaScript 的 this 指向
使用 MySQL 线程池对压力测试的影响