数据结构与算法JS描述笔记 1- JavaScript中的数组

342 阅读3分钟
  • 标准定义:一个存储元素的的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。

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

  • 创建数组的方式:

    • let arr = [1,2,3]
    • let arr = new Array(1,2,3) 只有一个参数时表示创建的数组的长度
    • 数组中元素可不是同一种数据类型
    • 可用Array.isArray()来判断是否为数组
  • 当把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。当你通过原引用修改了数组的值,另外一个引用也会感知到这个变化。这种行为被称为浅复制。深复制:

    function copy(arr1, arr2) {  
        for (var i=0; i<arr1.length; ++i) {
            arr2[i] = arr1[i];
        }
    }
    
  • 有两个方法将数组转换为字符串:join() 和 toString().两个方法都返回一个包含数组所有元素的字符串,各元素之间用逗号分开。

  • 通过已有数组创建新数组:contact() 和 splice()方法。

  • 数组的可变函数:push(), unshift(), pop(), shift(), splie(起始索引,想要删除的元素个数, 想要添加进数组的元素); reverse(), sort()。

    sort方法说明:
    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
    如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。
    若 a 大于 b,则返回一个大于 0 的值

  • 数组的迭代器方法,这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值或则一个新数组。

    • 不生成新数组的迭代器方法:forEach(), every(), some(), reduce(), reduceRight().

    reduce()方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。

    • 生成新数组的迭代器方法:map(), filter().

练习

  • 创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩的方法。
    function Grade() {
        this.data = [];
        this.add = add;
        this.average = average;
    }
    function add(name, score) {
        let obj = {};
        obj[name] = score;
        this.data.push(obj);
    	console.log(this.data)
    }
    function average() {
        let length = this.data.length;
        let total = 0;
    	for (let item of this.data) {
    		total += Object.values(item)[0];
        }
    	console.log('平均分', total/length);
    }
    let obj = new Grade();
    obj.add('张三', 98);
    obj.add('李四', 94);
    obj.average();
    
  • 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。
     let arr = ['hello', 'world', 'hi'];
     字符串打印
     console.log(arr.join());
     console.log(arr.reverse().toString());   
    
  • 创建一个对象,将字母存储在一个数组中,并且用一个方法可以将字母连在一起,显示成一个单词。
     let arr = ['h', 'w', 'h'];
     console.log(arr.join(''));