zoukankan      html  css  js  c++  java
  • JavaScript数据结构-数组

    数组是js中最常见的数据结构

    1.创建数组的几种方式

    1 var arr = [];
    2 //可以直接将元素放在[]中;
    3 var arr = [1,2,3,4,5];

    或者调用Array的构造函数创建

    1 var arr = new Array();
    2 //如果传入1个参数表示定义了数组的长度:
    3 var arr = new Array(10);
    4 //传入多个参数就作为数组的初始值:
    5 var arr = new Array(1,2,3,4,5);

    建议使用[]的方式创建

    2.可以使用Array.isArray()来判断一个对象是不是数组

    1 var arr = [1,2,3];
    2 var str = 'test';
    3 console.log(Array.isArray(arr)); //true
    4 console.log(Array.isArray(str)); //false

    3.一些常用的方法

    1)字符串的split()生成数组

    1 //调用字符串的split()方法
    2 //从经典的hello world开始
    3 var sentence = 'hello world';
    4 var words = sentence.split(" ");
    5 for (var i = 0; i < words.length; i++) {
    6     console.log(i + ':' + words[i]);
    7 }
    8 //0:hello
    9 //1:world

    2)数组的join()方法转化成字符串

    1 var numbers = [1, 2, 3, 4, 5];
    2 var numStr = numbers.join();//join不传参数,默认以逗号分隔
    3 console.log(numStr);

    3)indexOf()和lastIndexOf()

    1 //indexOf()
    2 var names = ['zhang', 'wang', 'li', 'zhao','zhang'];
    3 var name1 = names.indexOf('zhan');
    4 var name2 = names.indexOf('zhang');
    5 console.log(name1);//-1 表示不存在,返回-1
    6 console.log(name2);//0 第一个与参数相同的元素所在位置的索引
    7 //与之相对应的lastIndexOf()
    8 var name3 = names.lastIndexOf('zhang');
    9 console.log(name3);//4 最后一个与参数相同元素所在的位置的索引

    4)push()和unshift()

    1 var nums = [1, 2, 3];
    2 nums.push(4);//向数组尾部添加一个元素
    3 nums.unshift(5);//向数组头部添加一个元素
    4 console.log(nums);//[ 5, 1, 2, 3, 4 ]

    5)pop()和shift()

    1 var someNumbers = [1, 2, 3, 4, 5];
    2 var num1 = someNumbers.pop();//删除数组最后一个元素 返回被删除的元素
    3 var num2 = someNumbers.shift();//删除数组第一个元素 返回被删除的元素
    4 console.log(num1);//5
    5 console.log(num2);//1
    6 console.log(someNumbers);//[2,3,4]

    6)concat()

    1 //注意合并顺序
    2 var balls1 = ['football', 'basketball'];
    3 var balls2 = ['volleyball', 'tennis'];
    4 var ballsF = balls1.concat(balls2);
    5 console.log(ballsF);//[ 'football', 'basketball', 'volleyball', 'tennis' ]
    6 var ballsL = balls2.concat(balls1);
    7 console.log(ballsL);//[ 'volleyball', 'tennis', 'football', 'basketball' ]

    7)splice()

     1 //这个方法非常强大,接受3个参数
     2 //1.起始索引
     3 //2.要删除的元素个数(添加元素时为0)
     4 //3.想要添加进数组的元素
     5 var countries = ['China', 'USA', 'UK', 'Germany'];
     6 var country = countries.splice(2, 1);
     7 console.log(country);//[ 'UK' ]
     8 console.log(countries);//[ 'China', 'USA', 'Germany' ]
     9 countries.splice(1, 0, 'Spain');
    10 console.log(countries);//[ 'China', 'Spain', 'USA', 'Germany' ]

    8)reverse()和sort()

     1 var digit = [1, 2, 3, 4, 5];
     2 digit.reverse();//将数组的顺序进行翻转
     3 console.log(digit);//[ 5, 4, 3, 2, 1 ]
     4 //进行排序
     5 //第一种情况
     6 var computers1 = ['Apple', 'HP', 'Lenovo', 'Asus', 'Dale'];
     7 computers1.sort();
     8 console.log(computers1);//[ 'Apple', 'Asus', 'Dale', 'HP', 'Lenovo' ]
     9 //第二种情况
    10 var computers2 = ['apple', 'hp', 'Lenovo', 'Asus', 'Dale'];
    11 computers2.sort();
    12 console.log(computers2);//[ 'Asus', 'Dale', 'Lenovo', 'apple', 'hp' ]
    13 function compare(str1, str2) {
    14     return str1.toUpperCase() > str2.toUpperCase();
    15 }
    16 computers2.sort(compare);
    17 console.log(computers2);
    18 //一般来讲对数组进行排序,最好定义一个compare函数

    4.迭代器方法

    1)forEach()

     1 function square(num) {
     2     console.log(num, num * num);
     3 }
     4 var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
     5 numbers.forEach(square);
     6 // 1 1
     7 // 2 4
     8 // 3 9
     9 // 4 16
    10 // 5 25
    11 // 6 36
    12 // 7 49
    13 // 8 64
    14 // 9 81
    15 // 10 100

    2)every()和some()

     1 //every()接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。若全部为true,则返回true,类似&&
     2 //some()接受函数跟every()一样,但是只要有一个为true,则返回true,类似||
     3 function isEven(num) {
     4     return num % 2 === 0;
     5 }
     6 // 全为偶数
     7 var nums = [2, 4, 6, 8, 10];
     8 var even = nums.every(isEven);
     9 var evenSome1 = nums.some(isEven);
    10 console.log(even);//true 全部为true
    11 console.log(evenSome1);//true 至少有一个为true
    12 //不全为偶数
    13 var nums1 = [2, 3, 4, 6, 8, 10];
    14 var even2 = nums1.every(isEven);
    15 var evenSome2 = nums1.some(isEven);
    16 console.log(even2);//false 至少有一个不为true
    17 console.log(evenSome2);//true 至少有一个为true
    18 //全都不是偶数
    19 var oddNums = [1, 3, 5, 7, 9];
    20 var odd = oddNums.some(isEven);
    21 console.log(odd);//false 全为false

    3)reduce()

    1 //从右到左,依次对数组中的元素执行该函数
    2 function add(total, current) {
    3     return total + current;
    4 }
    5 var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    6 var sum = nums.reduce(add);
    7 console.log(sum);//55

    4)map和filter()

     1 //map和forEach有些相似,区别是map会返回一个新的数组
     2 function square(num) {
     3     return num * num;
     4 }
     5 var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
     6 var newValue = numbers.forEach(square);
     7 console.log(newValue);//undefined
     8 var newNumbers = numbers.map(square);
     9 console.log(newNumbers);//[ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 ]
    10 //filter和every()有些类似,区别是filter返回一个新数组,数组中包含应用该函数后结果为true的元素
    11 function isEven(num) {
    12     return num % 2 === 0;
    13 }
    14 function isOdd(num) {
    15     return num % 2 !== 0;
    16 }
    17 var nums = [];
    18 for (var i = 0; i < 20; i++) {
    19     nums.push(i);
    20 }
    21 var evens = nums.filter(isEven);
    22 var odds = nums.filter(isOdd);
    23 console.log(evens);//[ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 ]
    24 console.log(odds);//[ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 ]

    总结:数组是计算机编程中最常见的数据结构; 而JavaScript中数组是一种特殊的对象,使用起来比较灵活。

    创建、存取、查找和排序都有不同的方式,在使用时应该根据业务场景思考哪种更合适。

  • 相关阅读:
    计算机英语
    NSQ学习记录
    Java学习记录-注解
    VS插件开发

    双链表
    顺序表
    顺序队列
    顺序栈

  • 原文地址:https://www.cnblogs.com/shen901223/p/5892807.html
Copyright © 2011-2022 走看看