数据结构与算法JavaScript - 数组

来源:互联网 发布:微商神器软件 编辑:程序博客网 时间:2024/05/29 09:19

数组是计算机编程中最常见的数据结构,是编程语言中的一种内建类型,效率很高。
数组的标准定义是:一个存储元素的线性集合,可以通过索引来任意存取,是一种特殊的对象;

谨记

  • 在js中,数组是一种特殊的对象,所以js中的数组效率不如其它语言中的效率高!
  • 在js中,数组的键的类型可以是字符串,但是length属性不能正确显示长度了。

  • 在js中创建数组的方式有很多种

// 使用[]操作符声明数组var nums = [];// 使用Array构造函数声明数组var nums = new Array();

注:以上两种方式,专家推荐使用[]操作符,效率较高

  • 数组的整体操作(数组的复制)
// 浅复制,为_nums增加了一个新的引用,此时改变nums,_nums对应的索引位置的值也会改变;var nums = [1, 2, 3];var _nums = nums;// 深复制function copy(num1, num2) {    var i;    for(i = 0; i < num1.length; ++i) {    num2[i] = num1[i];    }}
  • 数组存取

    • indexof(name) 如果查找的元素在数组中,则只能返回数组中的第一个匹配的值,如果不在数组中,返回-1;
    • lastIndexof(name) 同上,返回最后一个拼配的值;
  • 数组中的值转化成字符串

    • join()
    • toString()
      使用以上方法将数组转换成以逗号分隔开字符;
  • 由已有数组创建新数组
    concat()splice() 方法允许通过已有数组创建新数组;

    • concat([]) 方法可以合并多个数组常见一个新数组;
    • splice(起始索引, 截取长度) 方法截取一个数组的子集创建一个新数组;
  • 改变数组内容

    • push() 将元素添加到数组末尾;
    • unshift 将元素添加到数组开头;
    • pop() 删除数组第一个元素;
    • shift() 删除数组最后一个元素;
    • splice(起始索引,删除元素个数,添加元素) 将元素添加到想要添加到地方
  • 数组排序

    • reverse() 将数组中的元素顺序进行反转
    • sort() 为数组元素是字符串的数组排序;
    • sort(compare) 为数组元素是数字类型进行排序
    function compare(a, b)  { return a - b;}
  • 不生成新数组的迭代方法

    • forEach(callback)
    • every(callback) 接受一个返回值是布尔类型的函数,对所有元素执行此callback函数,该函数均返回 true 则该方法返回 true
    • some(callback) 接受一个返回值是布尔类型的函数,只要一个元素是的此函数返回 true, 此方法返回true;
    • reduce(add) 将数组中的元素进行累加计算
  • 生成新数组的迭代方法
    对数组中所有元素应用 map() filter() 方法,返回一个新数组;

    • map(callback)forEach() 相似,区别是map()返回一个新的数组,该数组是对元素应用某个函数得到的结果
    • filter(callback)every() 方法相似,区别是所有均返回true 时,该方法返回新数组,filter() 函数可以对字符串数组进行过滤;
var nums = [1, 2, 3];console.log(nums.reduce(add)); // 6function add(a, b) {  return a + b;}
  • 创建二维数组
var nums = Array.matrix(2, 3, 0)//[[0, 0, 0], [0, 0, 0]]
  • 处理二维数组
    处理二维数组一般有两种方法:按列排序和按行排序。两种排序方式均使用一组嵌套的 for循环,外层循环对应行,内层循环对应列。
// 按行访问var grades = [[89, 77, 78], [76, 82, 81], [91, 94, 89]];var total = 0;var average = 0;for (var row = 0; row < grades.length; ++row) {  for (var col = 0; col < grades[row].length; ++col) {    total += grades[row][col];  }  average = total / grades[row].length;e  print("student " + parseInt(row + 1) + " average: " + average.toFiexed(2));  total = 0;  average = 0.0;}// 按列访问var grades = [[89, 77, 78], [76, 82, 81], [91, 94, 89]];var total = 0;var average = 0;for (var col = 0; col < grades.length; ++col) {  for(var row = 0; row < grades[col].length; ++row) {    total += grades[row][col];  }  average = total / grades[col].length;  print("test " + parseInt(col + 1) + " average: " + average.toFiexed(2));  total = 0;  average = 0.0;}
0 0