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中数组是一种特殊的对象,使用起来比较灵活。

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

原文地址:https://www.cnblogs.com/shen901223/p/5892807.html