前言
因为自己有时会忘记某个JS数组操作的方法,因此就对其总结出16个最常用的数组方法,方便自己学习和回顾
1.Array.push()
push()
方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度.可传入多个参数,然后按顺序添加
const animals = ['pigs', 'goats', 'sheep'];
const count = animals.push('cows');
console.log(count);
// expected output: 4
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows"]
animals.push('chickens', 'cats', 'dogs');
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]
2.Array.unshift()
unshift()
方法将一个或多个元素添加到数组的前面,并返回该数组的新长度,和push差不多,可传入多个参数,然后按顺序添加
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
// expected output: 5
console.log(array1);
// expected output: Array [4, 5, 1, 2, 3]
3.Array.reverse()
reverse()
方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。
const a = [1, 2, 3];
console.log(a); // [1, 2, 3]
a.reverse();
console.log(a); // [3, 2, 1]
4.Array.sort()
sort()
方法将数组中元素按大小排序,参数传入一个函数compareFunction,如果不传参,默认将元素转为字符串,然后比较它们的UTF-16代码单元值序列时构建的。
如果指明了 compareFunction
,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
- 如果
compareFunction(a, b)
小于 0 ,那么 a 会被排列到 b 之前;
- 如果
compareFunction(a, b)
等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
- 如果
compareFunction(a, b)
大于 0 , b 会被排列到 a 之前。 compareFunction(a, b)
必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
也可以写成:
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);
// [1, 2, 3, 4, 5]
5.Array.forEach()
forEach()
方法可以遍历数组,第一个参数item为循环的每一个对象,第二个参数为index索引,第二个参数可不写,第三个参数为执行回调函数时,this的指向。
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a"
// expected output: "b"
// expected output: "c"
6.Array.filter()
filter()
该方法返回一个数组,会遍历数组里面所有值,然后返回符合条件的元素,形成一个新的数组
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
7.Array.splice()
splice(index,[length,ele])
该方法截取数组元素,返回一个新数组,该方法会影响原数组
第一个参数index: 截取开始的索引
第二个参数length: 截取的个数 不填的话默认从索引截取到数组最后
第三个参数ele: 删除以后添加的元素(可不填)
var myFish = ["angel", "clown", "mandarin", "sturgeon"];
var removed = myFish.splice(2, 0, "drum");
// 运算后的 myFish: ["angel", "clown", "drum", "mandarin", "sturgeon"]
// 被删除的元素: [], 没有元素被删除
8.Array.join('')
join(str)
该方法将数组转化为字符串,并且以参数str进行连接,如果不传str,则默认用逗号连接
var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.join(); // myVar1的值变为"Wind,Rain,Fire"
var myVar2 = a.join(', '); // myVar2的值变为"Wind, Rain, Fire"
var myVar3 = a.join(' + '); // myVar3的值变为"Wind + Rain + Fire"
var myVar4 = a.join(''); // myVar4的值变为"WindRainFire"
9.Array.reduce()
reduce()
reduce方法会循环数组里面所有元素,并执行callback回调函数.
- 第一个参数为callback回调函数,该函数接收4个参数
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
- reduce第二个参数
initialVakue
接收acc累加器的初始值,如果不填写,那么acc的初始值为索引为0的元素
注意: 如果没有提供initialValue
,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue
,从索引0开始。
// reduce方法更多用于计算 它会遍历数组里面所有的元素 然后最后返回acc的值
const userinfo = [
{
name: '洗衣机',
price: '1500'
},
{
name: '小米',
price: '3500'
},
{
name: '化为',
price: '5000'
}
]
const allPrice = userinfo.reduce((acc, item) => acc + item.price, 0)
console.log(allPrice)// 输出值为10000
10.Array.prop()
prop()
该方法会删除数组的最后一个元素,并影响原数组,返回值是被删除的那个元素
- 此方法可以更改数组的长度
例子:删除数组最后一个元素
let myFish = ["angel", "clown", "mandarin", "surgeon"];
let popped = myFish.pop();
console.log(myFish);
// ["angel", "clown", "mandarin"]
console.log(popped);
// surgeon
11.Array.shift()
shift()
该方法会删除数组中的第一个元素,并影响原数组,返回删除元素的值
- 此方法可以更改数组的长度,和pop相似,一个删除第一个,一个删除最后一个
例子:删除数组第一个元素元素
let myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
console.log('调用 shift 之前: ' + myFish);
// "调用 shift 之前: angel,clown,mandarin,surgeon"
var shifted = myFish.shift();
console.log('调用 shift 之后: ' + myFish);
// "调用 shift 之后: clown,mandarin,surgeon"
console.log('被删除的元素: ' + shifted);
// "被删除的元素: angel"
12.Array.some()
shift()
该方法循环测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
- 如果有一个元素满足条件,那么循环会停止,然后返回true
- 如果没有元素满足条件,那么该方法会返回一个false
注意: 如果用一个空数组进行测试,在任何情况下它返回的都是
false
。
例子:检查在数组中是否有元素大于10
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
13.Array.every()
every()
方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
- 如果所有元素都满足条件,那么该方法返回true
- 当有一个元素不满足条件,该方法就会返回false
注意: 如果用一个空数组进行测试,在任何情况下它返回的都是
true
。(和some方法正好相反)
例子:检查在数组中所有元素是否都大于10
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
14.Array.map()
map()
方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。它不会影响原数组
- map方法第一个参数传入一个callback回调函数,该函数使用三个参数
1.callback
数组中正在处理的当前元素。
-
callback
数组中正在处理的当前元素的索引。 -
map
方法调用的数组。
例子:求数组中每个元素的平方根
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
15.Array.findIndex()
findIndex(callback)
方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1
callback
-
针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
-
element
当前元素。
-
index
当前元素的索引。
-
array
调用
findIndex
的数组。
-
例子:查找数组中首个质数元素的索引
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) {
return false;
}
}
return element > 1;
}
console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
16.Array.includes()
includes(valueToFind[, fromIndex])
方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true
,否则返回 false
。
-
valueToFind
-
需要查找的元素值。
-
fromIndex
可选 -
从
fromIndex
索引处开始查找valueToFind
。如果为负值,则按升序从array.length + fromIndex
的索引开始搜 (即使从末尾开始往前跳fromIndex
的绝对值个索引,然后往后搜寻)。默认为 0。
例子:判断数组中是否包含某个元素
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true
结语
本人最常用的数组方法基本就是上面这些了,里面有些方法,还有些别的参数,比如可以改变this指向的参数没有列出来,因为这些参数基本上用不到,而且也不便于学习理解.如果有兴趣深入了解的话可以参考mdn文档,以上是我个人总结,希望能帮助到大家,有什么错误,欢迎大家评论区指出或者私信我.码字不易,个位看官老爷点个赞呗!!!!!!