数组的基本API

1. 连接:arr.join("连接符")

用连接符把数组里面的元素连接成字符串。

arr.join("")能无缝连接。

2. 拼接:arr.concat("a","b",arr1)

强调:(1)不会修改原数组,返回新数组。

(2)如果传给 concat() 的某个参数本身是一个数组,则会将该数组的元素衔接到 arr 中,而不是数组本身。

3. 截取:arr.slice(start[,end])

强调:(1)不会修改原数组,返回新的子数组。

(2)含头不含尾。

(3)省略第二个参数表示从start位置开始一直截取到末尾。

(4)支持负数,表示倒数第几个。

4. 删除、插入、替换:arr.splice(start, deleteCount [,value1,value2...])

强调:(1)直接修改原数组。

(2)返回所有被删除元素组成的子数组。

(3)如果 deleteCount 是 0,表示插入元素,插入的元素会排在 start 处元素之前。

(4) 如果是删除,从 start 开始,并包含 start 处的元素。

5. 翻转数组:arr.reverse()

强调:(1)直接修改原数组。

6. 数组排序:arr.sort()

强调:(1)直接修改原数组。

(2)默认按照数组元素第一位的ASCII码从小到大排列。

(3)可以设置下列的比较器函数来控制升序,降序或者打乱。

(4)arr.sort(function(a,b){return a-b;}); 升序(只限数组中是数字或者数字字符串)。

(5)arr.sort(function(a,b){return b-a;}); 降序(只限数组中是数字或者数字字符串)。

(6)arr.sort(function(){undefined

return Math.random()>.5 ? 1 : -1;

});随机打乱数组(数组中可以是任何数据类型)

7. 查找:arr.indexOf(value[,from])或arr.lastIndexOf(value[,from])

强调:(1)返回value在数组中的索引,没有找到返回-1。

(2) indexOf 可以匹配指向同一个地址的对象

8. 循环数组,无返回值:arr.forEach(function(value,index,arr){})

9. 循环数组,有返回值:arr.map(function(value,index,arr){})

10. 数组转字符串:String(arr)或arr.toString()

将数组中的元素用逗号连接成字符串,类似于arr.join(",")。

11. 开头入栈:arr.unshift(value1, value2......)

在数组的最开头插入元素。

强调:(1)修改原数组。

(2)返回新数组的length。

12. 开头出栈:arr.shift()

弹出数组最开头的元素。

强调:(1)修改原数组。

(2)返回被弹出的元素。

13. 结尾入栈:arr.push(value1[,value2,arr1])

在数组末尾追加元素。

强调:(1)修改原数组。

(2)返回新数组的length。

(3)追加进去的数组不会被打散。

14. 结尾出栈:arr.pop()

弹出数组最末尾的元素。

强调:(1)修改原数组。

(2)返回被弹出的元素。

Array 的 every()、filter()、forEach()、map()、some() 这些方法的第二个参数,用于将第一个参数的函数体内的 this 指向第二个参数。如果没有指定第二个参数,this 值在非严格模式下是全局对象,在严格模式下则为 null。

1. Array.every  全部满足条件。// 是否全部大于0

let a = [1,2,3,4].every(item => {
return item > 0;
});
console.log(a); // true

2. Array.some

部分满足条件。

判断数组中有没有符合条件的元素,只要遇到符合条件的就退出循环。

// 是否有部分大于3
let a = [1,2,3,4].some(item => {
return item > 3;
});
console.log(a); // true

3. Array.filter

按条件过滤。

注意:过滤结果是一个数组。

const persons = [
{name: 'Jim', age: 22},
{name: 'Alen', age: 17},
{name: 'Lily', age: 20}
]

let a = persons.filter(person => {
return person.age > 20;
});
console.log(a) // [{name: 'Jim', age: 22}]

4. Array.reduce    汇总。

reduce的第2个参数是可选的,也就是初始值是可选的。当不指定初始值时,它将使用数组的第一个元素作为初始值。

函数里面的 index 是当前 value 在数组中的索引。当不传入初始值的时候,index 是从 1 开始的,总的循环次数比数组长度少1。

当传入初始值的时候,index 是从 0 也就是第一个元素开始,数组有多长就会遍历几次。

  适用场景1:累加

let a = [1,2,3,4].reduce((total, value, index, arr) => {
return total + value;
}, 0);
console.log(a) // 10
也有喜欢这么写的:

// 其实这里的 x 就是上面的 total,只是参数名字换了一下
let a = [1,2,3,4].reduce(function(x, y) {
return x + y;
});

适用场景2:数组处理

// 如:获取年龄大于18岁人的名字
const persons = [
{name: 'Jim', age: 22},
{name: 'Alen', age: 17},
{name: 'Lily', age: 20}
]

let names = persons.reduce((names, person) => {
if (person.age > 18) {
names.push(person.name)
}
return names;
}, []);
console.log(names) // ['Jim', 'Lily']

适用场景3:将数组转化为对象

const arr = [
{id: '1', name: 'Jim'},
{id: '2', name: 'Lily'},
{id: '3', name: 'Allen'}
]

let obj = arr.reduce((acc, current) => {
return {...acc, [current.id]: current};
}, {})

console.log(obj)
// {
// 1: {id: '1', name: 'Jim'},
// 2: {id: '2', name: 'Lily'},
// 3: {id: '3', name: 'Allen'}
// }

适用场景4:将二维数组扁平化为一维数组

const arrLevel2 = [
['大', '家', '好'],
['我', '是', '渣', '渣', '辉']
];

let arrLevel1 = arrLevel2.reduce((acc, current) => {
return acc.concat(current);
}, [])

console.log('arrLevel1', arrLevel1)
// -> ["大", "家", "好", "我", "是", "渣", "渣", "辉"]

适用场景5:在一次遍历中进行多次计算

有时我们需要对数组进行多次计算。例如,我们想要计算数字列表的最大值和最小值,我们可以这样写:

const readings = [0.3, 1.2, 3.4, 0.2, 3.2, 5.5, 0.4];

const initMinMax = {
minReading: Number.MAX_VALUE,
maxReading: Number.MIN_VALUE,
};

const minMax = readings.reduce((acc, current) => {
return {
minReading: Math.min(acc.minReading, current),
maxReading: Math.max(acc.maxReading, current)
}
}, initMinMax);

console.log(minMax); // -> {minReading: 0.2, maxReading: 5.5}

适用场景6:获取数组中的最大值

let arr = [22, 19, 50, 7, 15];
let max = arr.reduce(function(x, y) {
return x > y ? x : y;
}); // 50

5. Array.reduceRight

reduceRight() 的工作原理和 reduce() 一样,不同的是它按照数组索引从高到低(从右到左)处理数组。

[2, 10, 60].reduceRight(function (x, y) {
return x/y;
});
// => 3: (60/10)/2

6. Array.find

找出第一个符合条件的数组成员,没找到返回 undefined。

const persons = [
{id: 1, name: 'Jim', age: 22},
{id: 2, name: 'Alen', age: 17},
{id: 3, name: 'Lily', age: 20}
]

let a = persons.find(person => {
return person.id === 2;
});

console.log(a) // {id: 2, name: 'Alen', age: 17}

7. Array.findIndex

找出第一个符合条件的数组成员的位置,没找到返回 -1。

const persons = [
{id: 1, name: 'Jim', age: 22},
{id: 2, name: 'Alen', age: 17},
{id: 3, name: 'Lily', age: 20}
]

let a = persons.findIndex(person => {
return person.id === 2;
});

console.log(a) // 1

8. Array.includes

表示某个值是否在数组里,includes() 不接受函数参数。

let a = [1,2,3].includes(3);

console.log(a) // true

9. Array.toLocaleString()

将数组转换为本地化字符串。它首先调用所有数组元素的 toLocaleString() 方法,然后使用地区特定的分隔字符将结果字符串连接起来。

posted on 2022-03-11 10:37  北唐陌颜  阅读(83)  评论(0编辑  收藏  举报

导航