Array 数组
最后更新于:2022-04-02 03:25:05
[TOC]
## 静态方法
### `Array.isArray()`
### `from` 把可转数组的伪数组转数组
```
Array.from('foo'); // [ "f", "o", "o" ]
const set = new Set(['foo', 'bar', 'baz', 'foo']);
Array.from(set); // [ "foo", "bar", "baz" ]
Array.from([1, 2, 3], x => x + x); // [2, 4, 6]
```
## 实例方法
### `push()`后添加,`pop()`后删除
```
var arr = [];
arr.push(1) // 1
arr.push('a') // 2
arr.push(true, {}) // 4
arr // [1, 'a', true, {}]
```
### `shift()` 前删除,`unshift()` 前添加
### `join()` 数组转字符串
```
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
```
可以打包类似数组的
```
Array.prototype.join.call('hello', '-') ;// "h-e-l-l-o"
var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-') ; // 'a-b'
```
### `concat()` 并接数组
```
[].concat(['1','3',['4','6']],'2'); //[ '1', '3', [ '4', '6' ], '2' ]
```
对象是浅拷贝
```
var b={};
var a=[];
var c = a.concat(b);
b.h='hello';
c[0].h;//hello
```
### `reverse()`颠倒元素排列
### `slice(start,end)` 截取元素,返回新数组
### `splice()` 删除原始数组一部分,并添加新数组,返回值是被删元素
```
var my = new Array ("1", "2", "3", "4", "5");
my.splice(1,2,"a","b","c") // ["2", "3"]
my //["1", "a", "b", "c", "4", "5"]
```
### `sort()`排序
自定义排序函数
```
var myArray = new Array("Wind", "Rain", "Fire");
myArray.sort(); // [ "Fire", "Rain", "Wind" ]
[{ 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()` 遍历数组方法 ,返回新数组
```
var a=[4,5,67]
var new_a = a.map(function (t,index,arr) {
console.log(arr);//[ 4, 5, 67 ]
return t+a[index+1];
})
console.log(new_a);//[ 9, 72, NaN ]
```
map 可传入第二个参数,可通过this调用
```
var arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
console.log(this);//[ 'a', 'b', 'c' ]
return this[e];
}, arr)
```
### `forEach()` 无返回值
与`map`类似,但是没有返回值
`forEach()` 无法中断 `break`
### `filter()`
回调函数可传入三个参数,当前成员,当前位置和整个数组
```
a.filter(function (t) {
return t>6
})//[ 56, 7, 8 ]
a//[ 3, 4, 56, 7, 8 ]
```
`filter`方法还可以接受第二个参数,使过滤函数可扩展
```
var a=[1,2,3,4];
var b={max:3}
a.filter(function (t) {
return t > this.max
}, b);//[ 4 ]
a;//[ 1, 2, 3, 4 ]
```
### `some()`,`every()` 至少一个ture/所有多为true
`some`至少一个true,返回true,`evety()`每个为`true` 则为`true`
1. 回调函数可接受三个参数(当前元素,元素位置,整个数组)
2. 可接受第二参数, 可用`this `调用
```
var a=[1,2,3,4];
a.some(function (t) {
return t > 1
});//true
a.every(function (t) {
return t > 1
});//false
```
### `reduce()`,`reduceRight()`
reduce与reduceRight 支持四个参数
1. 累积变量,默认为数组的第一个成员 (必须)
2. 当前变量,默认为数组的第二个成员 (必须)
3. 当前位置(从0开始)
4. 原数组
```
var a=[1,2,3,4];
a.reduce(function (a, b) {
// a 为上次结果的值
// b 为第二个结果开始
return a + b
});//10
```
如果传入第二个参数,则 第一次的a为传入的值,b从0 位置开始
```
var a=[1,2,3,4];
a.reduce(function (a, b) {
// a 为上次结果的值
// b 为第二个结果开始
console.log('a',a);
return a + b
},100);//110
```
由于可以遍历数组,则可做此相关操作,如找出最大字符
```
var a=['12132222','213213','a']
console.log(a.reduce(function (b, c) {
return b.length > c.length ? b : c;
}));
```
### `indexOf()`,`lastIndexOf()`
```
var a = ['a', 'b', 'a', 'b', 'a'];
console.log(a.indexOf('b')); // 1
console.log(a.indexOf('b', 2)); // 3
```
### `find()`,`findIndex()` 返回符合条件的测试元素/索引
```
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
}
console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }
```
### `entries()`数组转 Iterator
```
const array1 = ['a', 'b', 'c'];
const iterator1 = array1.entries();
console.log(iterator1.next().value);
// expected output: Array [0, "a"]
console.log(iterator1.next().value);
// expected output: Array [1, "b"]
```
### `find()` 返回符合函数的第一个值
```
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
}
console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }
```
### `flat()` 二维数组平摊成一维
```
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
```
### `includes()` 是否存在值
```
const array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
```
### 链式使用
```
var users = [
{name: 'tom', email: 'tom@example.com'},
{name: 'peter', email: 'peter@example.com'}
];
users
.map(function (user) {
return user.email;
})
.filter(function (email) {
return /^t/.test(email);
})
.forEach(function (email) {
console.log(email);
});
// "tom@example.com"
```
### 字符串转字符
```
Array.prototype.forEach.call("a string", function(chr) {
console.log(chr);
});
```
';