前端vue2如何对比两个数组对象的元素哪个修改了,哪个新增了,哪个删除了,并在各自的原数组打上对应的标记
时间: 2024-10-23 19:12:55 浏览: 12
在 Vue.js 中,如果你需要比较两个数组对象并找出哪些元素被修改、新增或删除,你可以借助一些JavaScript库如`lodash`或使用递归和`Array.prototype.findIndex`等原生方法。这里提供一种简单的示例方法:
1. 首先,安装`lodash`库(如果尚未安装):
```bash
npm install lodash
```
2. 然后,在你的Vue组件中引入`_.isEqual`(用来比较对象是否相等),`_.findIndex`(查找元素索引),以及`_.intersection`(获取两个数组交集):
```javascript
import _ from 'lodash';
```
3. 定义一个函数,接受两个数组作为参数,返回一个包含三个新数组的对象,分别表示已修改、新增和删除的元素:
```javascript
function compareArrays(arr1, arr2) {
const modified = [];
const added = _.difference([], arr2);
const removed = _.difference(arr1, arr2);
for (let i = 0; i < arr1.length; i++) {
if (!_.isEqual(arr1[i], arr2[i])) {
// 修改标记
arr1[i].isModified = true;
modified.push(i); // 或者直接push到新数组里,看需求
}
}
return { modified, added, removed };
}
```
4. 使用这个函数比较你的数组,并根据结果更新数组元素的标记:
```javascript
const result = compareArrays(array1, array2);
array1.forEach((item, index) => {
if (result.modified.includes(index)) {
console.log('Element at index', index, 'has been modified');
}
if (result.added.includes(index)) {
console.log('New element:', item, 'at index', index);
}
if (result.removed.includes(index)) {
console.log('Element deleted at index', index);
}
});
```
阅读全文