最近在学习数据结构,作为前端最常用的数据结构——数组,无疑是最重要的。现在我想总结一下数组的常用方法。
一、创建数组
// 创建一个空数组
var numbers = [ ]
// 指定长度为10的数组
var numbers = new Array(10)
二、判断数组
// 可以调用 Array.isArray() 来判断一个对象是否是数组
var arr = [7,4,1776];
console.log(Array.isArray(arr)); // true
三、由字符串生成数组
// 调用字符串对象的 split() 方法也可以生成数组。
var sentence = "the quick brown fox jumped over the lazy dog";
var words = sentence.split(" ");
四、查找元素
indexOf( ) // 函数总是返回第一个与参数相同的元素的索引,如果不包含,就返回 -1。
lastIndexOf( ) // 该函数返回相同元素中最后一个元素的索引,如果没找到相同元素,则返回 -1
-
五、数组的字符串表示
// 有两个方法可以将数组转化为字符串:join() 和 toString()。
// 这两个方法都返回一个包含数组所有元素的字符串,各元素之间用逗号分隔开。
var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"];
var namestr = names.join( ); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
namestr = names.toString( ); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
六、由已有数组创建新数组
// concat 方法可以合并多个数组创建一个新数组。
arr1.concat(arr2);
// splice ( ) 方法截取一个数组的子集创建一个新数组。
var nums = [1,2,3,100,200,300,400,4,5];
nums.splice(3,4);
console.log(nums); // 1,2,3,4,5
七、为数组添加/删除元素
push( ) // 将一个元素添加到数组末尾.
unshift( ) // 将元素添加在数组的开头
pop( ) // 删除数组末尾的元素:
shift( ) // 删除数组的第一个元素
// 从数组中间位置添加和删除元素
// splice() 方法为数组删除、添加元素:
// 起始索引(也就是你希望开始添加元素的地方);
// 需要删除的元素个数(添加元素时该参数设为 0);
// 想要添加进数组的元素。
var nums = [1,2,3,7,8,9];
nums.splice(3,0,4,5,6);
console.log(nums); // 1,2,3,4,5,6,7,8,9
八、为数组排序
reverse( ) // 将数组中元素的顺序进行翻转。
sort( ) // 对数组进行排序
// 如果元素是字符串类型,那么数组的可变方法就非常好使:
["David","Mike","Cynthia","Clayton","Bryan","Raymond"].sort()
//Bryan,Clayton,Cynthia,David,Mike,Raymond
// 数字类型的话:
var nums = [1,7,8,2,5];
nums1.sort((a, b)=>{return a - b}) // [1,2,5,7,8]
九、迭代器方法(不生成新数组的迭代器方法)
forEach() // 该方法接受一个函数作为参数,对数组中的每个元素使用该函数。
function square(num) {
console.log(num, num * num);
}
var nums = [1,2,3,4,5,6,7,8,9,10];
nums.forEach(square);
every() // 该方法接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。
// 如果对于所有的元素,该函数均返回 true,则该方法返回 true。
var names = ["abc", "cb", "mba", "dna"]
// 判断数组的元素是否都包含a字符
var flag = names.every(function (t) {
return t.indexOf('a') != -1
})
alert(flag)
some()
// 该方法也接受一个返回值为布尔类型的函数
// 只要有一个元素使得该函数返回 true,该方法就返回 true。
reduce() //该方法接受一个函数,返回一个值。
// 该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,
// 直到数组中的最后一个元素,最后返回得到的累加值。
// 下面这个例子展示了如何使用 reduce() 方法为数组中的元素求和:
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce( (runningTotal, currentValue)=> {
return runningTotal + currentValue
}) // 55
十、迭代器方法(生成新数组的迭代器方法)
有两个迭代器方法可以产生新数组:map() 和 filter()。
- map() 和 forEach() 有点儿像,对数组中的每个元素使用某个函数。
返回值 | |
map | 返回一个新数组 |
forEach | 没有返回值 |
var grades = [77, 65, 81, 92, 83];
var newgrades = grades.map(grade=> return grade += 5); // 82, 70, 86, 97, 88
- filter() 和 every() 类似,传入一个返回值为布尔类型的函数。
返回值 | |
filter | 返回一个新数组 |
every | 返回 true |
var names = ["abc", "cb", "mba", "dna"]
// 获取names中所有包含'a'字符的元素
var newNames = names.filter(function (t) {
return t.indexOf("a") != -1
})
console.log(newNames) //["abc", "mba", "dna"]