JS中的数组


title: JS中的数组

date: 2018-9-26 22:42:25
tags: [JavaScript]
categories: JavaScript


数组是什么

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
其实本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object。

数组的length属性

数组的length属性,返回数组的成员数量。只要是数组,就一定有length属性。

数组的构造方法

var x = new Array(3) ; // 3表示数组的长度,每一个元素都为undefined
var y = new Array(3,3); // 得到一个数组[3,3],是仿自Java中的写法,不常用。
var a = [3,3] ; // 得到了一个数组[3,3],常用

in 运算符 && for…in 循环

for in循环不仅可以遍历对象,也可以遍历数组,因为数组是一种特殊对象。

  • 使用时需要注意,for...in不仅会遍历数组所有的数字键,还会遍历非数字键。

例如:

var a = [1, 2, 3];
a.foo = true;

for (var key in a) {
  console.log(key);
}
// 0
// 1
// 2
// foo

数组的遍历

常用for循环,while循环
或forEach遍历(不支持break 和 continue ,不返回值)

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

// for循环
for(var i = 0; i < a.length; i++) {
  console.log(a[i]);
}

// while循环
var i = 0;
while (i < a.length) {
  console.log(a[i]);
  i++;
}

// forEach遍历
a.forEach(function(value,key){
  console.log(key+':'+value);
})
// 0:a
// 1:b
// 2:c
// 3:d

什么是伪数组

如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,但实际并不是数组。

  • 伪数组的原型链中没有Array.prototype
数组.__proto__ === Array.protype
伪数组对象.__proto__ === Object.prototype

数组的一些API

sort() 排序

该方法是JS封装的一个重排序方法,使用的算法是快速排序。不传参时默认为升序排列。
注:sort()方法返回的是原数组,即使用该方法会改变原来的数组序列。
=>arr.sort(function(a,b){return a-b}) 升序
=>arr.sort(function(a,b){return b-a}) 降序

join() 分隔

该方法返回的是字符串,参数表示用什么分隔数组的每一项,不传参默认逗号分隔,参数为空数组时,数组每一项之间没有间隔。
代码示例:

array = ["a", "b", "c", "d"];
array.join('-');
// "a-b-c-d"

concat() 连接

该方法返回的是新数组,原数组不会被改变。
示例:

a = [1,2,3];
b = [4,5,6];
a.concat(b);
// 新数组 [1, 2, 3, 4, 5, 6]

使用concat()方法还可以用于复制数组
例如:

arr = [1,2,3,4,5];
var newArr = arr.concat([]);
// newArr 的值为 [1, 2, 3, 4, 5]
newArr === arr; // false
// 虽然值相同,但这是两个不同的对象,引用的地址不同

map()

功能与forEach相同,但map()有返回值。同样不会改变原数组的值,返回一个新数组。
示例:

arr = [1, 2, 3, 4, 5];
arr.map(function(value,key){
    return value * 2;
})
// [2, 4, 6, 8, 10]

filter() 过滤、筛选

用法与map()一样。
示例:

arr = [1, 2, 3, 4, 5];
arr.filter(function(value,key){
    return value < 3
})
// [1, 2]

reduce() 可接收一个函数作为累加器

第一个参数传一个函数作为累加器,第二个参数表示初始值。
示例:

arr = [1, 2, 3, 4, 5];
arr.reduce(function(previous,current){
    return previous + current;
}, 0)
// 15

可以用reduce()方法来写map()数组每一项×2:

a = [1, 2, 3, 4, 5];
a.reduce(function(array,n){
    array.push(n * 2);
    return array;
},[])
// [2, 4, 6, 8, 10]

可以用reduce()方法来写filter()筛选偶数:

a = [1, 2, 3, 4, 5];
a.reduce(function(array,n){
    if(n % 2 === 0){
            array.push(n);
        }
    return array;
},[])
// [2, 4]

你可能感兴趣的:(JS中的数组)