js中有许多关于数组的方法,在一些算法题中经常需要使用到这些方法,现在此做一个总结。
indexOf()
该方法将从头到尾检索数组,找到对应元素的索引值(index)并返回这个index。如果数组中没有相对应的元素则返回-1。
const birds = ['Parrot', 'Falcon', 'Owl'];
console.log(birds.indexOf('Owl')); // 2
console.log(birds.indexOf('Rabbit')); // -1
push()
将一个或多个元素添加到数组末尾,并返回新数组。
var arr = ['cat','dog','rabbit'];
arr.push('pig')
console.log(arr)// ["cat", "dog", "rabbit", "pig"]
unshift()
将一个或多个元素添加到数组的起始位置,并返回新数组。
var arr = ['cat','dog','rabbit'];
arr.unshift('pig')
console.log(arr);//["pig", "cat", "dog", "rabbit"]
pop()
删除数组的最后一个元素并返回删除的元素。
var arr = ['cat','dog','rabbit'];
arr.pop()
console.log(arr);// ["cat", "dog"]
shift()
删除数组的第一个元素并返回删除的元素。
var arr = ['cat','dog','rabbit'];
arr.shift()
console.log(arr);// ["dog", "rabbit"]
splice()
已知元素的索引值,可以用该方法删除/添加元素。
如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
splice(index,num,item1,item2...)
index:开始删除/添加的位置
num:删除元素的数量。可以为0,返回一个空数组[]
itemX:要添加到数组的新元素
const cities = ['Manchester', 'Liverpool', 'Edinburgh', 'Carlisle'];
const index = cities.indexOf('Liverpool');
if (index !== -1) {
cities.splice(index, 1);
}
console.log(cities); // [ "Manchester", "Edinburgh", "Carlisle" ]
使用splice()中可能会遇到的问题
for循环中使用splice()元素下标改变,会跳过某个元素删除。
解决方法:
for(let n=num.length-1;n>-1;n--){
//从数组末开始遍历,倒序循环删除即可。具体代码需按需求修改。
list.splice(num[n],1)
}
for...of...
获得每个元素
const birds = ['Parrot', 'Falcon', 'Owl'];
for (const bird of birds) {
console.log(bird);
}
//依次输出Parrot Falcon Owl
//相当于使用for循环遍历
map()
若想要对数组中的每个元素进行相同的修改,可以使用map()
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。 map() 不会改变原始数组。
function double(number) {
return number * 2;
}
const numbers = [5, 2, 7, 6];
const doubled = numbers.map(double);
console.log(doubled); // [ 10, 4, 14, 12 ]
filter()
若想要创造一个新数组包含原数组中符合条件的元素,可以使用filter()
返回值:返回数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组。
注意: filter() 不会对空数组进行检测。filter() 不会改变原始数组。
function isLong(city) {
return city.length > 8;
}
const cities = ['London', 'Liverpool', 'Totnes', 'Edinburgh'];
const longer = cities.filter(isLong);
console.log(longer); // [ "Liverpool", "Edinburgh" ]
join()
将数组转化为字符串。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join();
console.log(energy);//Banana,Orange,Apple,Mango
与slice()方法刚好相反
slice() string方法
若想要截取长字符串中有用的元素到数组中,可以使用slice()
const data = 'Manchester,London,Liverpool,Birmingham,Leeds,Carlisle';
const cities = data.split(',');
console.log(cities[0]);
// the first item in the array:Manchester
console.log(cities[1]);
// the second item in the array:London
console.log(cities[cities.length - 1]) ;
// the last item in the array:Carlisle
reverse()
反转数组顺序。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
console.log(fruits)//Mango,Apple,Orange,Banana
sort()
对数组进行排序。会改变原始数组。
var arr = [1,1000,40,2];
arr.sort();
console.log(arr)//[1,1000,2,40] 默认排序顺序为按字母升序。
//会先按最大位数字大小排序
数字排序(升序)
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
console.log(points);
//1,5,10,25,40,100
数字排序(降序)
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});
console.log(points);
//100,40,25,10,5,1
字母降序排列
先使用一次sort(),再使用一次reserve()即可。
例子摘自MDN和菜鸟教程,有错误欢迎指出和交流!