一、创建数组
通过 [] 操作符声明一个数组变量:
var numbers = [ ]
得到一个长度为0的空数组。 可以通过内建的length属性 console.log(numbers.length) // 0
在声明数组变量时,直接在 [ ] 操作符中放入一组元素;
var numbers = [1, 2, 3, 4,5 ]
console.log(numbers.length) // 5
还可以
var numbers = new Array();
console.log(numbers.length) // 0
同样也可以传入一组元素作为数组的初始值;
var numbers = new Array(1,2,3,4,5);
console.log(numbers.length) // 5
也可以在调用 Array的构造函数时,可以只传入一个参数,用来指定数组的长度
var numbers = new Array(10);
console.log(numbers.length) // 10
在 脚本语言里很常见的一个特性是,数组中的元素不必是同一种数据类型,这一点和很多编程语言不同,
var objects = [1, "Joe",true, null];
可用Array.isArray() 来判断一个对象是否为数组,
var numbes = 2;
var arr = [1, 2,3, 4,45,566,];
console.log( Array.isArray(numbers) ) ; // 显示 false
console.log( Array.isArray(arr) ) ; // 显示 true
创建数组的几种方式 ,大多数js 专家推荐使用 [ ] 操作符;
2 读写数组
可用使用 [ ] 操作符将数据赋给数组 比如 将1-100的数字赋给一个数组
var nums = [ ];
for ( var i = 0; i<100; i++){
nums[i] = i+1;
}
还可以用 [ ] 操作符读取数组中的元素;
var nums = [ 1 ,2 ,3 ,4,5]
var sum = nums [0] + nums [1] + nums [ 2] + nums [3] + nums [4]
console.log(sum) // 15
3 由字符串生成数组
调用字符串对象的split()方法也可以生成数组,该方法同过一些常见的分隔符,将一个字符串分成几部分,并将每个部分作为一个元素保存于一个新建的数组中,
var sentence = "the quick brown fox jumped over the lazy dog";
var words = sentence.split(" ");
for (var i = 0; i < words.length; ++i) {
console.log("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
4 对数组的整体性操作
有几个操作是将数组作为一个整体进行的,
将一个数组赋给另外一个数组:
var nums = [];
for (var i = 0; i < 10; ++i) {
nums[i] = i+1;
}
var samenums = nums;
当把一个数组赋给另外一个数组时, 只是为被赋值的数组增加了一个新的引用。 当你通过原引用修改了数组的值, 另外一个引用也会感知到这个变化。
var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = nums;
nums[0] = 400;
console.log(samenums[0]); // 显示 400
这种行为被称为浅复制, 新数组依然指向原来的数组。
更好的方案是使用深复制, 将原数组中的每一个元素都复制一份到新数组中。
function copy(arr1, arr2) {
for (var i = 0; i < arr1.length; ++i) {
arr2[i] = arr1[i];
}
}
var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
console.log(samenums[0]); // 显示 1
print() 函数, 用它可以显示数组里的元素。
var nums = [1,2,3,4,5];
console.log(nums); // 1 2 3 4 5
二 存取函数
1. 查找元素
indexOf() 函数是最常用的存取函数之一, 用来查找传进来的参数在目标数组中是否存在。如果目标数组包含该参数, 就返回该元素在数组中的索引; 如果不包含, 就返回 -1。
var names = ["David", "Cynthia", "Raymond", "Clayton", "Jennifer"];
var name = ' Raymond '
var position = names.indexOf(name);
if(position >= 0){
console.log(name + '有有有')
}else{
console.log(name + '没有没有')
}
输出为 Raymond有有有
如果数组中包含多个相同的元素,indexOf()函数总是返回第一个与参数相同的元素的索引。另外有一个功能与之类似的函数 lastIndexOf(),该函数返回相同元素中的最后一个元素的索引,如果没有找到相同的元素,返回-1,
var names = ["David", "Mike", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"];
var name = "Mike";
var firstPos = names.indexOf(name);
console.log(name + "有有有"+firstPos ); /// Mike有有有1
var lastPos = names.lastIndexOf(name);
console.log(name + "有有有" + lastPos); Mike有有有5
2、数组的字符串表示
有两个方法可以将数组转化为字符串: 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
3.由已有数组创建新数组
concat() 和 splice()方法允许通过已有数组创建新数组。
concat方法可以合并多个数组创建一个新数组。
splice方法截取一个数组的子集创建一个新数组。
concat() 方法
var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
var dmpDept = ["Raymond", "Cynthia", "Bryan"];
var itDiv = cisDept .concat(dmpDept );
console.log(itDiv); // [Mike,Clayton,Terrill,Danny,Jennifer,Raymond,Cynthia,Bryan] 首先输出 cisDept 数组里的元素
itDiv = dmpDept .concat(cisDept);
console.log(itDiv); // [ Raymond,Cynthia,Bryan,Mike,Clayton,Terrill,Danny,Jennifer] 首先输出 dmpDept 数组里的元素。
splice() 方法从现有数组里截取一个新数组。 该方法的第一个参数是截取的起始索引, 第二个参数是截取的长度。
var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
var dmp = cisDept.splice(1,1)
console.log(dmp ) // [Clayton]
console.log(cisDept ) // ["Mike", "Terrill", "Danny", "Jennifer"]; 删除数组
splice() 方法还有其他用法, 比如为一个数组增加或移除元素,
cisDept.splice(2,0,"hhhhh")
console.log(cisDept) // ["Mike", "Clayton","hhhhh", "Terrill", "Danny", "Jennifer"];
可变函数
1 为数组添加元素
有两个方法可以为数组添加元素: push() 和 unshift()。
push() 方法会将一个元素添加到数组末尾:
var nums = [1,2,3,4,5];
console.log(nums); // [1,2,3,4,5]
nums.push(6);
console.log(nums); // [1,2,3,4,5,6]
也可以使用数组的 length 属性为数组添加元素, 但 push() 方法看起来更直观:
var nums = [1,2,3,4,5];
console.log(nums); // [1,2,3,4,5]
nums[nums.length] = 6;
console.log(nums); // [1,2,3,4,5,6]]
unshift() 方法可以将元素添加在数组的开头,
var nums = [2,3,4,5];
nums.unshift(1);
console.log(nums); // [1,2,3,4,5]
nums.unshift(1,2,3,3);
console.log(nums); // [1,2,2,3,3,3,4,5]
2 从数组中删除元素
pop() 方法可以删除数组末尾的元素:
var nums = [1,2,3,4,5,9];
nums.pop();
console.log(nums); // [1,2,3,4,5];
shift() 方法可以删除数组的第一个元素
var nums = [9,1,2,3,4,5];
nums.shift();
console.log(nums); // [1,2,3,4,5];
pop() 和 shift() 方法都将删掉的元素作为方法的返回值返回, 因此可以使用一个变量来保存删除的元素:
var nums = [1,2,3,4,5,9];
var a = nums.pop();
var b = nums.shift();
console.log(a); // [9];
console.log(b); // [1];
3 从数组中间位置添加和删除元素
使用 splice() 方法为数组添加元素, 需提供如下参数:
• 起始索引(也就是你希望开始添加元素的地方) ;
• 需要删除的元素个数(添加元素时该参数设为 0) ;
• 想要添加进数组的元素。
var nums = [1,2,3,7,8,9];
var newElements = [4,5,6];
nums.splice(3,0,newElements);
console.log(nums); //[ 1,2,3,4,5,6,7,8,9]
要插入数组的元素不必组织成一个数组, 它可以是任意的元素序列, 比如:
var nums = [1,2,3,7,8,9];
nums.splice(3,0,4,5,6);
console.log(nums); //[ 1,2,3,4,5,6,7,8,9]
使用 splice() 方法从数组中删除元素的例子:
var nums = [1,2,3,100,200,300,400,4,5];
nums.splice(3,4);
console.log(nums); //[ 1,2,3,4,5]
4 为数组排序
reverse() 该方法将数组中的元素的顺序进行翻转。
var nums = [1,2,3,4,5];
nums.reverse();
console.log(nums); // [5,4,3,2,1]
sort() 如果元素是字符串类型, 那么数组的可变方法sort() 就非常好使
var names = ["David","Mike","Cynthia","Clayton","Bryan","Raymond"];
names.sort();
console.log(names); // [Bryan,Clayton,Cynthia,David,Mike,Raymond]
数组元素是数字类型, sort() 方法的排序结果就不能让人满意了:
var nums = [3,1,2,100,4,200];
nums.sort();
console.log(nums); // [1,100,2,200,3,4]
sort() 方法是按照字典顺序对元素进行排序的, 因此它假定元素都是字符串类型, 在上一个例子中, 即使元素是数字类型, 也被认为是字符串类型。 为了让 sort() 方法也能排序数字类型的元素, 可以在调用方法时传入一个大小比较函数, 排序时, sort() 方法将会根据该函数比较数组中两个元素的大小, 从而决定整个数组的顺序。对于数字类型, 该函数可以是一个简单的相减操作, 从一个数字中减去另外一个数字。 如果结果为负, 那么被减数小于减数; 如果结果为 0, 那么被减数与减数相等; 如果结果为正, 那么被减数大于减数。将这些搞清楚之后, 传入一个大小比较函数, 再来看看前面的例子:
function compare(num1, num2) {
return num1 - num2;
}
var nums = [3,1,2,100,4,200];
nums.sort(compare);
console.log(nums); // [1,2,3,4,100,200]
sort() 函数使用了 compare() 函数对数组按照数字大小进行排序, 而不是按照字典顺序