饥人谷技术博客

数组

2016-07-13  本文已影响0人  韩佳宁

数组(Array)

数组(Array)是按排列的一组值.每个值的位置都有编号(从0开始)

var arr = ['a', 'b', 'c'];

a、b、c就构成一个数组,两端的方括号是数组的标志.a是0号位,b是1号位,c是2号位.

数组属于一种特殊的对象.typeof运算符会返回数组的类型是object。

typeof [1, 2, 3] // "object"

数组的创建与修改


var food = new Array('fish','chicken','chips')
var food = Array('fish','chicken','chips') //new操作符可以省略
var food = ['fish','chicken','chips']
var arr1 = [1, 2, , 3] //1,2,undefined, 3

var a = arr1[0] // 访问第1个元素 1
var b = arr1[2] // undefined
arr1[1] = 33   //设置元素
arr1[5] = 22   //此时 arr1 为1,33,undefined, 3,undefined,22

需要注意的是

var arr2 = [1, 2, 3,]  // IE8及以下是1,2,3,undefined 长度4
                       // chrome 为1,2,3 长度3  此写法不推荐

JS的数组中可以保存任意类型的数据

var arr = [
    {a: 45},                //对象
  [1, 2, 3],                //数组
  function() {return true;} //函数
  ];

JS数组的大小是可以动态调整的,即可随着数据的添加自动增长以容纳新增数据

var arr = [0,1,2]
console.log(arr.length)  //3
arr[3] = 3
console.log(arr.length)  //4
arr[99] = 99
console.log(arr.length)  //100

Array方法

遍历

var cars =['Saab','Volvo','BMW']
for(var i = 0; i< cars.length; i++){
console.log(cars[i]);
}

检测

var arr = [1, 3, 4];
arr instanceof Array //true

连接

concat() 连接数组,不会改变现有的数组,仅返回被连接数组

var food1 = ['鸡蛋','牛奶']
var food2 = ['米饭','面包']
var food3 = ['香肠','罐头']
var food4 = food1.concat(food2,food3)
console.log(food4)//"鸡蛋", "牛奶", "米饭", "面包", "香肠", "罐头"

删减

shifted = empty.shift()
console.log(empty) //[]
console.log(shifted) //undefined


- unshift()

数组的开头添加一个或多个元素,并返回新的length

```js
var arr = [1, 2];
arr.unshift(0)      //3
arr                 //[0, 1, 2]
arr.unshift(-2, -1) //   5
arr                 //[-2, -1, 0, 1, 2]
arr.unshift( [-3] ) //6
arr                 //[[-3], -2, -1, 0, 1, 2]

转换

把所有元素放入一个字符串,通过传入的参数连接各元素,不改变原数组
如果传入的参数是空字符串,那么数组中的所有元素将被直接连接。
如果省略传入的参数,默认用逗号连接

把数组转换为字符串,并返回结果,不改变原数组

var acter1 = ['特朗普','克林顿','桑德斯']
var acter2 = acter1.toString()
var acter3 = acter1.join('++')
acter1          //["特朗普", "克林顿", "桑德斯"]
acter2          //"特朗普,克林顿,桑德斯"
acter3          //"特朗普++克林顿++桑德斯"
typeof acter1   //"object"
typeof acter2   //"string"
typeof acter3   //"string"
stringObject.split(separator,howmany)
- separator
必需,字符串或正则表达式,从该参数指定的地方分割stringObject.
如果把空字符串 ("") 用作 separator,那么 stringObject 中的**每个字符之间**都会被分割。
- howmany
可选,该参数指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。
如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
- 返回值
返回一个由字符串元素组成的数组。
该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。
** 返回的数组中的字串不包括 separator 自身 **
但是,如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)

var str1 = 'a-b,ds-d,-,asd,ds-ad,';
var str2 = str1.split(',');
var str3 = str1.split('-');
console.log(str1); //"a-b,ds-d,-,asd,ds-ad,"
                   //split()方法不改变原字符串
console.log(str2); //["a-b", "ds-d", "-", "asd", "ds-ad", ""]
console.log(str3); //["a", "b,ds", "d,", ",asd,ds", "ad,"]
console.log(typeof str3[2]); //分割后形成的新数组的元素是字符串    

** String.split() 执行的操作与 Array.join 执行的操作是相反的 **

排序

var fruit = ['cherries', 'apples', 'bananas'];
    fruit.sort(); // ['apples', 'bananas', 'cherries']

var scores = [1, 10, 2, 21];
    scores.sort(); // [1, 10, 2, 21]


var things = ['word', 'Word', '1 Word', '2 Words'];
    things.sort(); // ['1 Word', '2 Words', 'Word', 'word']
function compare(a, b) {
  if (a小于b) {
    return -1;
  }
  if (a大于b) {
    return 1;
  }
  //a等于 b
  return 0;
}

希望比较数字而非字符串,比较函数可以简单的以 a 减 b,如下的函数将会将数组升序排列

function compareNumbers(a, b) {
  return a - b;
}
sort 方法可以使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);

// [1, 2, 3, 4, 5]

** 这两种方法都会使原数组发生改变 **


参考资料:

  1. MDN
  2. W3school
  3. 阮一峰. JavaScript 标准参考教程(alpha)
  4. Nicholas C.Zakas. JavaScript高级程序设计[M]. 第1版. 人民邮电出版社, 2012.

此文是作者学习中记录的笔记
限于作者当前水平,出现错误在所难免,望读者指正
本文版权归作者所有,转载务必说明作者及本文地址

上一篇 下一篇

猜你喜欢

热点阅读