Vue中常用的数组方法.filter()、.map()、.forEach()、.find()、.findIndex()、.some()、.every()

.filter()、.map()、.forEach()、.find()、.findIndex()、.some()、.every()、.fill()

本文仅为自己在项目中经常用到的一些数组方法的使用,以便随时查看。

.filter()

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
是否改变原数组:否
是否对空数组进行检测:否

语法:

const arr= [32, 33, 16, 40];
const arr1 = arr.filter(item => item >= 18)
console.log(arr)   // [32, 33, 16, 40]
console.log(arr1)  // [32, 33, 40]

.map()

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
是否改变原数组:否
是否对空数组进行检测:否

语法:

const arr= [4, 9, 16, 25];
const arr1 = arr.map(item => item+2)
console.log(arr)   // [4, 9, 16, 25]
console.log(arr1)  // [6, 11, 18, 27]

.forEach()

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
tips: forEach()中不支持使用break(报错)和return(不能结束循环),有需要时可使用常规的for循环。

语法:

const arr= [4, 9, 16, 25];
const arr1 = [];
arr.forEach(item => arr1.push(item))
console.log(arr)   // [4, 9, 16, 25]
console.log(arr1)  // [4, 9, 16, 25]

.find()

find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。

find() 方法为数组中的每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
  • 如果没有符合条件的元素返回 undefined

注意: find() 对于空数组,函数是不会执行的。
注意: find() 并没有改变数组的原始值。

语法:

const arr= [4, 9, 16, 25];
const b = arr.find(item => item>10)
const c = arr.find(item => item<1)
console.log(arr)   // [4, 9, 16, 25]
console.log(b)  // 16
console.log(c)  // undefined

.findIndex()

findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。

findIndex() 方法为数组中的每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
  • 如果没有符合条件的元素返回 -1

注意: findIndex() 对于空数组,函数是不会执行的。
注意: findIndex() 并没有改变数组的原始值。

语法:

const arr= [4, 9, 16, 25];
const b = arr.findIndex(item => item>10)
const c = arr.findIndex(item => item<1)
console.log(arr)   // [4, 9, 16, 25]
console.log(b)  // 2
console.log(c)  // -1

.some()

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。

语法:

const arr= [4, 9, 16, 25];
const b = arr.some(item => item>10)
const c = arr.some(item => item<1)
console.log(arr)   // [4, 9, 16, 25]
console.log(b)  // true
console.log(c)  // false

.every()

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。

语法:

const arr= [4, 9, 16, 25];
const b = arr.every(item => item>10)
const c = arr.every(item => item>1)
console.log(arr)   // [4, 9, 16, 25]
console.log(b)  // false
console.log(c)  // true

.fill()

fill() 方法用于将一个固定值替换数组的元素。

注意: fill() 不会对空数组进行填充。
注意: fill() 会改变原始数组。

语法:

const arr1= [4, 9, 16, 25];
const b = arr1.fill(100);
const arr2= [4, 9, 16, 25];
const c = arr2.fill(100, 2, 4)  // 2为开始填充的起始位置,4为结束位置(不包含)
const arr3= [];
const d = arr3.fill(100);
console.log(arr1)   // [100, 100, 100, 100]
console.log(b)  // [100, 100, 100, 100]
console.log(arr2)  // [4, 9, 100, 100]
console.log(c)  // [4, 9, 100, 100]
console.log(arr3)  // []
console.log(d)  // []
### Vue 中 `this.$set` 的使用方法及场景 #### 方法定义与功能 `this.$set` 是 Vue 提供的一个全局 API,用于向响应式对象中添加一个新的属性,并确保该新属性也是响应式的,同时会触发视图更新[^3]。 #### 基本语法 基本语法如下所示: ```javascript vm.$set(target, propertyName/index, value) ``` 其中: - `target`: 要修改的目标对象或数组。 - `propertyName/index`: 对于对象而言是指要设置的新属性名;对于数组则是索引位置。 - `value`: 新属性对应的值。 #### 场景一:为已有对象动态增加新属性并保持其响应性 如果尝试直接在一个已经存在的响应式对象上添加新的属性,则这些新添加的属性不会被自动检测到成为响应式的部分。此时可以利用 `$set()` 来完成这项工作[^2]。 ```javascript // 不推荐的方式 - 新增属性不具有响应性 data() { return { user: { name: 'John' } }; }, methods: { addAgeDirectly() { this.user.age = 30; // 这样做 age 属性不是响应性的 } } ``` 正确做法应该是这样: ```javascript // 推荐方式 - 使用 $set 确保新增属性具备响应性 methods: { addAgeProperly() { this.$set(this.user, 'age', 30); // 正确的做法使 age 成为了响应式属性 } } ``` #### 场景二:更改数组中的某个元素 由于 JavaScript 数组的一些变更操作(如 push(), pop(), shift(), unshift(), splice(), sort(), reverse())已经被 Vue 所拦截并进行了特殊处理以实现双向绑定的效果,但对于某些特定的操作(例如通过索引来直接赋值),仍然需要借助 `$set()` 函数来通知框架进行必要的 DOM 更新[^1]。 ```javascript let items = ['a', 'b']; items[1] = 'c'; // 非响应式变化 console.log(items); // 应改为下面的形式以维持响应特性 this.$set(this.items, 1, 'd'); // 可见的变化将会反映在界面上 ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值