Featured image of post (七)JavaScript数组

(七)JavaScript数组

(七)数组

1. 基本概念

  • JS 数组都是动态创建的,可以自由增加数组长度,这点不同于 C/C++。
  • 一个 JS 数组内可以存放不同类型的元素,例如 ['abc', 1, true, undefined],这点也不同于 C/C++/Java。

2. 创建数组

2.1 数组字面量创建数组

  • 创建空数组

    1
    
    let arr = [];
    
  • 创建一般数组

    1
    
    let arr = [1, 2, 3];
    

2.2 new Array 创建数组对象

  1. 创建空数组

    1
    
    let arr = new Array();
    
  2. 创建指定长度的数组,有2个空数组元素

    1
    
    let arr1 = new Array(2);
    
  3. 创建放有指定元素的数组([2, 3])

    1
    
    let arr2 = new Array(2, 3);
    
  4. 一些示例

    1
    2
    3
    4
    5
    6
    
    let arr_0 = [1, true, "aaa"];
    let arr_1 = [];
    let arr_2 = new Array(); // []
    let arr_3 = new Array(2); // [empty × 2]
    let arr_4 = new Array(2,); // [empty × 2]
    let arr_5 = new Array(2, 3, 4); // [2, 3, 4]
    

3. 基本操作

  1. 数组元素访问

    1
    
    let e = arr[index];
    
  2. 获取数组长度

    1
    
    let len = arr.length;
    
  3. 数组遍历
    方式一:

    1
    2
    3
    
    for (let i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }
    

    方式二:

    1
    2
    3
    
    for (const i in arr) {
        console.log(arr[i]);
    }
    
  4. 数组逆转

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // 反转数组
    function reverse(arr) {
        let res = [];
        for (let i = arr.length - 1; i >= 0; i--) {
            res[res.length] = arr[i];
        }
        return res;
    }
    console.log(reverse([1, 2, 3, 4, 0])); // [0, 4, 3, 2, 1]
    

4. 检测一个值是否为数组

4.1 instanceof

1
2
3
4
5
6
function isArray(test) {
    if (test instanceof Array) return true;
    return false;
}
console.log(isArray([1, 2])); // true
console.log(isArray(1)); // false

4.2 Array.isArray()

Array.isArray() 方法用于检测一个值是否为数组。

5. 添加删除数组元素的方法

方法名 说明 返回值
push(arg1,...) 末尾添加一个或多个元素 返回新的长度
pop() 删除数组最后一个元素,数组长度减 1,无参数,修改了原数组 返回所删除元素的值
unshift() 向数组的开头添加一个或多个元素,修改了原数组 返回新的长度
shift() 删除数组的第一个元素,数组长度减 1,无参数,修改了原数组 返回第一个元素的值

6. 数组排序

方法名 说明 是否修改原数组
reverse() 颠倒数组中元素顺序,无参数 会改变原数组,返回新数组
sort() 对数组的元素进行排序 会改变原数组,返回新数组

sort 方法对数组进行原地排序,但是默认按照字典序排序。需要传入一个比较函数 cmp(a, b),然后得到我们需要的排序效果。

1
2
3
4
5
6
7
8
9
let arr = [1, 4, 17, 12, 9];

arr.sort();
console.log(arr); // [ 1, 12, 17, 4, 9 ]

let cmp = (a, b) => a - b;

arr.sort(cmp);
console.log(arr); // [ 1, 4, 9, 12, 17 ]

其中,let cmp = (a, b) => a - b; 为升序,b - a 为降序。

7. 数组索引方法

方法名 说明 返回值
indexOf() 数组中查找指定元素的 第一个索引 若存在则返回索引号,否则返回 -1
latsIndexOf() 查找指定元素在数组中的 最后一个的索引 若存在则返回索引号,否则返回 -1

indexOf 前面开始查找,lastIndexOf 从后面开始查找,但索引都是从前往后由 0 算起。

1
2
3
4
5
let arr = ['red', 'green', 'blue', 'pink', 'blue'];

console.log(arr.indexOf('blue')); // 2
console.log(arr.lastIndexOf('blue')); // 4
console.log(arr.indexOf('yellow')); // -1

8. 数组去重

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 数组去重
function unique(arr) {
    let res = [];
    for (let i = 0; i < arr.length; i++) {
        if (res.indexOf(arr[i]) === -1) {
            res.push(arr[i]);
        }
    }
    return res;
}

console.log(unique([ 2, 3, 3, 4, 5, 5 ])); // [ 2, 3, 4, 5 ]

9. 数组与字符串互转

9.1 数组转换为字符串

方法名 说明 返回值 是否改变原数组
toString() 将数组转换成字符串,逗号分隔每一个 返回一个字符串 不改变
join('分隔符') 把数组中的所有元素转换为一个字符串,以指定符号分割 返回一个字符串 不改变

示例

1
2
3
4
5
6
let a = ['a', 'b', 'c', 'd', 'e'];

console.log(a.toString());  // a,b,c,d,e
console.log(a.join('')); // abcde
console.log(a.join('-')); // a-b-c-d-e
console.log(a); // [ 'a', 'b', 'c', 'd', 'e' ]

9.2 字符串转换为数组

使用 split() 方法。

1
2
3
let str = 'blue-green-pink-red';
let res = str.split('-');
console.log(res); // [ 'blue', 'green', 'pink', 'red' ]
Powered by GitHub.Pages
Built with Hugo
主题 StackJimmy 设计
© Licensed Under CC BY-NC-SA 4.0