🔒 数组常用api

数组常用的一些属性和方法
菜鸟教程:数组的属性和方法

数组

菜鸟教程:数组手册

创建数组

1
var arr = [1,2,3,4]

修改数组

1
2
arr[1] = 'x'
arr // [1,'x',3,4]

查找数组

1
arr[0] //1

属性

length

设置或返回数组元素的个数

1
2
var arr = [1,2,3]
arr.length //3

prototype

允许你向数组对象添加属性或方法。

1
2
3
4
5
6
7
8
9
Array.prototype.myUcase=function(){
for (i=0;i<this.length;i++){
this[i]=this[i].toUpperCase();
}
}
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.myUcase();
fruits // ["BANANA", "ORANGE", "APPLE", "MANGO"]

方法

splice(index, howmany, newValue)删除后插入

splice() 方法用于插入、删除或替换数组的元素。
会改变arr

删除

1
2
3
4
var arr = [0,1,2,3,4]
var remove = arr.splice(1,3)
remove //[1,2,3]
arr //[0,4]

替换(删除后插入)

1
2
3
4
var arr = [0,1,2,3,4]
var remove = arr.splice(1,3,123) //从第1项开始,往后删除3个,并插入123
remove // [1,2,3]
arr // [0,123,4]

slice(起始index, 截止index)截取

1
2
3
4
var arr = [0,1,2,3,4]
var newArr = arr.slice(1,3) //截取第1~第3项
newArr //[1,2]
arr //[0,1,2,3,4]

slice也可以用来截取字符串

1
2
var str = '012345'
str.slice(1,4) //"123"

concat() 连接

concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,
而仅仅会return一个连接后的数组。

1
2
3
4
var arr1 = [1,2,3]
var arr2 = [4,5,6]
var x = arr1.concat(arr2)
x // [1,2,3,4,5,6]

every() 判断所有元素是否都满足给定的条件

1
2
let ages = [32, 33, 16, 40];
ages.every(age => age>18);//false

some() 判断是否至少有一个元素满足给定的条件

1
2
let ages = [3, 10, 18, 20];
ages.some(age => age>18);//true

sort() 排序

会改变arr

1
2
3
4
5
6
7
8
9
10
11
12
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
//高级用法
var students = ['小明','小红','小花'];
var scores = { 小明: 59, 小红: 99, 小花: 80 };
students.sort(function(a,b) {
return scores[a]-scores[b]; //按照scores从小到大排序
});
//["小明", "小红", "小花"]

对象的排序

1
2
3
4
5
6
7
8
9
10
11
12
[
{ name: "张三", age: 30 },
{ name: "李四", age: 24 },
{ name: "王五", age: 28 }
].sort(function (o1, o2) {
return o1.age - o2.age;
})
// [
// { name: "李四", age: 24 },
// { name: "王五", age: 28 },
// { name: "张三", age: 30 }
// ]

map() 对数组里的元素进行处理,然后return新的数组

1
2
3
4
var numbers = [1, 2, 3];
var newNum = numbers.map(function(value,index) {
return value + 1;
});

forEach() 遍历数组元素

1
2
3
4
var arr = [1,2,3];
arr.forEach((item,index) => {
console.log(item);
})

filter() 筛选出符合条件的元素

1
2
3
4
var result = [1, 2, 3, 4, 5].filter(value => {
return (value > 3); //结果为true的元素组成一个新数组返回
})
// [4, 5]

Array.prototype.xxx.call()处理字符串

https://www.jianshu.com/p/0362b6cd90d6

通过“借用”数组的方法可以很方便的处理字符串。可以“借用”数组的非变更方法,但不能“借用”数组的可变更方法

1
2
3
4
5
6
7
8
9
10
11
12
var a = 'foo';
// 数组的非变更方法,即不改变原有数组的方法
var b = Array.prototype.join.call(a, '-');
var c = Array.prototype.map.call(a, v => v.toUpperCase()).join()
var d = Array.prototype.slice.call(a);
console.log(b); // 'f-o-o'
console.log(c); // 'FOO'
console.log(d); // ['f', 'o', 'o']
// 数组的可变更方法,即能够改变原有数组的方法
var e = Array.prototype.reverse.call(a);
// 报错

Array.from(伪数组)

将伪数组转成数组,比如getElementsByTagName、arguments等
let arr = Array.from(aLi)

将字符串变成数组

1
2
3
4
5
Array.from('hello') // [h,e,l,l,o]
等同于
'hello'.split('')

for…of

1
2
3
4
5
6
let arr = ['cat','dog','bird'];
for(let value of arr){
console.log(value)
}
//cat,dog,bird

find() 找出第一个满足要求的值

如果没有符合条件的成员,则返回undefined

1
[1, 4, -5, -6].find((item,index) => item < 0) // -5

findIndex() 找到第一个满足要求的index

如果所有item都不符合条件,则返回-1

1
[1, 4, -5, -6].findIndex((item,index) => item < 0) // 2

includes(item,startIndex=0) 是否含有这项(默认从第0项开始检查)

1
2
3
[1,2,3,4].includes(2) //true,默认startIndex=0
[1,2,3,4].includes(2,3) //false

flat() 拉平数组

1
2
3
4
5
//默认只拉平一层
let newArr = [1, 2, [3, [4, 5]]].flat() //[1, 2, 3, [4, 5]]
//参数表示想要拉平的层数
[1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]

flat(Infinity) 完全拉平

[1, [2, [3]]].flat(Infinity) //[1, 2, 3]

-------------本文结束感谢您的阅读-------------