update: 数组中的查找元素

This commit is contained in:
qianguyihao 2020-06-14 23:02:33 +08:00
parent adc06caa3f
commit 50f5d03d35
2 changed files with 160 additions and 132 deletions

View File

@ -158,8 +158,6 @@ console.log(name.search(/\yi/i)); // 打印结果6
```
### 3includes()字符串中是否包含指定的内容
**语法**

View File

@ -1,6 +1,6 @@
## 数组的方法清单
**数组的类型相关**
### 数组的类型相关
| 方法 | 描述 | 备注 |
| :------------------------------- | :--------------------------------- | :--- |
@ -11,7 +11,7 @@
注意获取数组的长度是用`length`属性不是方法关于 `length`属性详见上一篇文章
**数组元素的添加和删除**
### 数组元素的添加和删除
| 方法 | 描述 | 备注 |
| :-------- | :------------------------------------------------------------------------- | :------------- |
@ -25,7 +25,7 @@
| | | |
| fill() | 填充数组用固定的值填充数组返回结果为**新的数组** | 不会改变原数组 |
**数组的合并和拆分**
### 数组的合并和拆分
| 方法 | 描述 | 备注 |
| :------- | :--------------------------------------------------- | :--------------- |
@ -35,34 +35,33 @@
注意`split()`是字符串的方法不是数组的方法
**数组排序**
### 数组排序
| 方法 | 描述 | 备注 |
| :-------- | :------------------------------------------------------ | :----------- |
| reverse() | 反转数组返回结果为**反转后的数组** | 会改变原数组 |
| sort() | 对数组的元素,默认按照**Unicode 编码**从小到大进行排序 | 会改变原数组 |
**遍历数组**
| 方法 | 描述 | 备注 |
| :-------- | :--------------------------------------------------------------------------------------------------------- | :------------------------------------------------------- |
| for 循环 | 这个大家都懂 | |
| forEach() | for 循环类似但需要兼容 IE8 以上 | forEach() 没有返回值也就是说它的返回值是 undefined |
| map() | 对原数组中的每一项进行加工将组成新的数组 | 不会改变原数组 |
| filter() | 数据过滤对数组中的每一项运行回调函数该函数返回结果是 true 的项将组成新的数组返回结果为**新的数组** | 不会改变原数组 |
| every() | 如果有一项返回 false则停止遍历此方法返回 false | 一假即假要求每一项都返回 true最终的结果才返回 true |
| some() | 只要有一项返回 true则停止遍历此方法返回 true | 一真即真要求每一项都返回 false最终的结果才返回 false |
| reduce | 为数组中的每一个元素依次执行回调函数 | |
**查找数组的元素**
### 查找数组的元素
| 方法 | 描述 | 备注 |
| :-------------------- | :---------------------------------------------------- | :--- |
| indexOf(value) | 从前往后索引获取 value 在数组中的第一个下标 | |
| lastIndexOf(value) | 从后往前索引获取 value 在数组中的最后一个下标 | |
| find(function()) | 找出**第一个**满足指定条件返回 true的元素 | |
| indexOf(value) | 从前往后索引检索一个数组中是否含有指定的元素 | |
| lastIndexOf(value) | 从后往前索引检索一个数组中是否含有指定的元素 | |
| find(function()) | 找出**第一个**满足指定条件返回 true的元素 | |
| findIndex(function()) | 找出**第一个**满足指定条件返回 true的元素的 index | |
| |
### 遍历数组
| 方法 | 描述 | 备注 |
| :-------- | :--------------------------------------------------------------------- | :------------------------------------------------------- |
| for 循环 | 这个大家都懂 | |
| forEach() | for 循环类似但需要兼容 IE8 以上 | forEach() 没有返回值也就是说它的返回值是 undefined |
| map() | 对原数组中的每一项进行加工将组成新的数组 | 不会改变原数组 |
| filter() | 过滤数组返回结果是 true 的项将组成新的数组返回结果为**新的数组** | 不会改变原数组 |
| every() | 如果有一项返回 false则停止遍历此方法返回 false | 一假即假要求每一项都返回 true最终的结果才返回 true |
| some() | 只要有一项返回 true则停止遍历此方法返回 true | 一真即真要求每一项都返回 false最终的结果才返回 false |
| reduce | 为数组中的每一个元素依次执行回调函数 | |
## isArray()判断是否为数组
@ -798,6 +797,146 @@ qianguyihao 排序后的数组:[
上方代码中有人可能会问 publishTime 字段已经是 int 类型了为啥在排序前还要做一次 parseInt() 转换这是因为这种数据一般是后台接口返回给前端的数据可能是 int 类型也可能是字符串类型所以还是统一先做一次 partInt() 比较保险这是一种良好的工作习惯
## indexOf() lastIndexOf()获取数据的索引
**语法1**
```javascript
索引值 = 数组.indexOf(想要查询的元素);
索引值 = 数组.lastIndexOf(想要查询的元素);
```
备注`indexOf()` 是从前向后查找元素的位置同理`lastIndexOf()`是从后向前寻找
**解释**可以检索一个数组中是否含有指定的元素如果数组中含有该元素则会返回其**第一次出现**的索引如果没有找到指定的内容则返回 -1
这个方法的作用
- **如果获取的索引值为 0说明数组是以查询的元素为开头的**
- 如果获取的索引值为-1说明这个数组中没有指定的元素
**注意**`indexOf()`在检索时是严格类型约束类似于`===`
**举例 1**
```javascript
var arr = ['a', 'b', 'c', 'd', 'e', 'd', 'c'];
console.log(arr.indexOf('c')); //从前往后,找第一个"c"在哪个位置
console.log(arr.lastIndexOf('d')); //从后往前,找第一个"d"在哪个位置
```
打印结果
```
2
5
```
**举例2**
```js
let arr = ['1', '2', '3', '4', '5'];
console.log(arr.indexOf(2));
```
打印结果
```
-1
```
**语法 2**
这个方法还可以指定第二个参数用来指定查找的**起始位置**语法如下
```javascript
索引值 = 数组.indexOf(想要查询的元素, [起始位置]);
```
举例 3两个参数时需要特别注意
```javascript
let arr = ['q', 'i', 'a', 'n', 'g', 'u', 'y', 'i', 'h', 'a', 'o'];
result = str.indexOf('a', 3); // 从第三个位置开始查找 'a'这个元素 【重要】
console.log(result); // 打印结果9
```
上方代码中`indexOf()`方法中携带了两个参数具体解释请看注释
## find()
**语法**
```javascript
find(function (item, index, arr) {
return true;
});
```
**作用**找出**第一个**满足指定条件返回 true的元素
备注一旦找到符合条件的第一个元素将不再继续往下遍历
举例
```javascript
let arr = [2, 3, 2, 5, 7, 6];
let result = arr.find(function (item, index) {
return item > 4; //遍历数组arr一旦发现有第一个元素大于4就把这个元素返回
});
console.log(result); //打印结果5
```
## findIndex()
**语法**
```javascript
findIndex(function (item, index, arr) {
return true;
});
```
**作用**找出**第一个**满足指定条件返回 true的元素的 index
举例
> 我们直接把上面的代码中的 find 方法改成 findIndex来看看效果
```javascript
let arr = [2, 3, 2, 5, 7, 6];
let result = arr.findIndex(function (item, index) {
return item > 4; //遍历数组arr一旦发现有第一个元素大于4就把这个元素的index返回
});
console.log(result); //打印结果3
```
## valueOf()返回数组本身
```javascript
数组本身 = 数组.valueOf();
```
这个方法的意义不大因为我们直接写数组对象的名字就已经是数组本身了
## 概念数组的遍历
遍历数组即获取并操作数组中的每一个元素在我们的实战开发中使用得非常频繁
@ -1072,115 +1211,6 @@ sumValue = arr.reduce(function (total, item) {
console.log('sumValue:' + sumValue); // 打印结果18
```
## indexOf() lastIndexOf()获取数据的索引
**语法**
```javascript
索引值 = 数组.indexOf(value);
索引值 = 数组.lastIndexOf(value);
```
**解释**
- indexOf(value)从前往后索引获取 value 在数组中的第一个下标
- lastIndexOf(value) 从后往前索引获取 value 在数组中的最后一个下标
**作用**
利用这个方法我们可以判断某个值是否在指定的数组中**如果没找到则返回`-1`**
**举例 1**
```javascript
var arr = ['a', 'b', 'c', 'd', 'e', 'd', 'c'];
console.log(arr.indexOf('c')); //从前往后,找第一个"c"在哪个位置
console.log(arr.lastIndexOf('d')); //从后往前,找第一个"d"在哪个位置
```
打印结果
![](http://img.smyhvae.com/20180126_1125.png)
**举例 2**判断某个值是否在数组中
```javascript
var arr = ['29926392220', '29965620629', '28003663436', ' ', '28818504366'];
var str = [
{ name: 'smyh', id: '12334' },
{ name: 'vae', id: '28818504366' },
];
str.filter((item) => {
console.log(arr.indexOf(item.id));
});
```
## find()
**语法**
```javascript
find(function (item, index, arr) {
return true;
});
```
**作用**找出**第一个**满足指定条件返回 true的元素
备注一旦找到符合条件的第一个元素将不再继续往下遍历
举例
```javascript
let arr = [2, 3, 2, 5, 7, 6];
let result = arr.find(function (item, index) {
return item > 4; //遍历数组arr一旦发现有第一个元素大于4就把这个元素返回
});
console.log(result); //打印结果5
```
## findIndex()
**语法**
```javascript
findIndex(function (item, index, arr) {
return true;
});
```
**作用**找出**第一个**满足指定条件返回 true的元素的 index
举例
> 我们直接把上面的代码中的 find 方法改成 findIndex来看看效果
```javascript
let arr = [2, 3, 2, 5, 7, 6];
let result = arr.findIndex(function (item, index) {
return item > 4; //遍历数组arr一旦发现有第一个元素大于4就把这个元素的index返回
});
console.log(result); //打印结果3
```
## valueOf()返回数组本身
```javascript
数组本身 = 数组.valueOf();
```
这个方法的意义不大因为我们直接写数组对象的名字就已经是数组本身了
## 数组练习
### splice()练习数组去重