update: 数组中的查找元素
This commit is contained in:
parent
adc06caa3f
commit
50f5d03d35
@ -158,8 +158,6 @@ console.log(name.search(/\yi/i)); // 打印结果:6
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 3、includes():字符串中是否包含指定的内容
|
### 3、includes():字符串中是否包含指定的内容
|
||||||
|
|
||||||
**语法**:
|
**语法**:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
## 数组的方法清单
|
## 数组的方法清单
|
||||||
|
|
||||||
**数组的类型相关**:
|
### 数组的类型相关
|
||||||
|
|
||||||
| 方法 | 描述 | 备注 |
|
| 方法 | 描述 | 备注 |
|
||||||
| :------------------------------- | :--------------------------------- | :--- |
|
| :------------------------------- | :--------------------------------- | :--- |
|
||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
注意,获取数组的长度是用`length`属性,不是方法。关于 `length`属性,详见上一篇文章。
|
注意,获取数组的长度是用`length`属性,不是方法。关于 `length`属性,详见上一篇文章。
|
||||||
|
|
||||||
**数组元素的添加和删除**:
|
### 数组元素的添加和删除
|
||||||
|
|
||||||
| 方法 | 描述 | 备注 |
|
| 方法 | 描述 | 备注 |
|
||||||
| :-------- | :------------------------------------------------------------------------- | :------------- |
|
| :-------- | :------------------------------------------------------------------------- | :------------- |
|
||||||
@ -25,7 +25,7 @@
|
|||||||
| | | |
|
| | | |
|
||||||
| fill() | 填充数组:用固定的值填充数组,返回结果为**新的数组** | 不会改变原数组 |
|
| fill() | 填充数组:用固定的值填充数组,返回结果为**新的数组** | 不会改变原数组 |
|
||||||
|
|
||||||
**数组的合并和拆分**:
|
### 数组的合并和拆分
|
||||||
|
|
||||||
| 方法 | 描述 | 备注 |
|
| 方法 | 描述 | 备注 |
|
||||||
| :------- | :--------------------------------------------------- | :--------------- |
|
| :------- | :--------------------------------------------------- | :--------------- |
|
||||||
@ -35,34 +35,33 @@
|
|||||||
|
|
||||||
注意,`split()`是字符串的方法,不是数组的方法。
|
注意,`split()`是字符串的方法,不是数组的方法。
|
||||||
|
|
||||||
**数组排序**:
|
### 数组排序
|
||||||
|
|
||||||
| 方法 | 描述 | 备注 |
|
| 方法 | 描述 | 备注 |
|
||||||
| :-------- | :------------------------------------------------------ | :----------- |
|
| :-------- | :------------------------------------------------------ | :----------- |
|
||||||
| reverse() | 反转数组,返回结果为**反转后的数组** | 会改变原数组 |
|
| reverse() | 反转数组,返回结果为**反转后的数组** | 会改变原数组 |
|
||||||
| sort() | 对数组的元素,默认按照**Unicode 编码**,从小到大进行排序 | 会改变原数组 |
|
| 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 在数组中的第一个下标 | |
|
| indexOf(value) | 从前往后索引,检索一个数组中是否含有指定的元素 | |
|
||||||
| lastIndexOf(value) | 从后往前索引,获取 value 在数组中的最后一个下标 | |
|
| lastIndexOf(value) | 从后往前索引,检索一个数组中是否含有指定的元素 | |
|
||||||
| find(function()) | 找出**第一个**满足「指定条件返回 true」的元素。 | |
|
| find(function()) | 找出**第一个**满足「指定条件返回 true」的元素 | |
|
||||||
| findIndex(function()) | 找出**第一个**满足「指定条件返回 true」的元素的 index | |
|
| 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():判断是否为数组
|
## isArray():判断是否为数组
|
||||||
|
|
||||||
@ -798,6 +797,146 @@ qianguyihao 排序后的数组:[
|
|||||||
|
|
||||||
上方代码中,有人可能会问: publishTime 字段已经是 int 类型了,为啥在排序前还要做一次 parseInt() 转换?这是因为,这种数据,一般是后台接口返回给前端的,数据可能是 int 类型、也可能是字符串类型,所以还是统一先做一次 partInt() 比较保险。这是一种良好的工作习惯。
|
上方代码中,有人可能会问: 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
|
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()练习:数组去重
|
### splice()练习:数组去重
|
||||||
|
Loading…
Reference in New Issue
Block a user