前端vue2如何对比两个数组对象的元素哪个不一样,哪个新增了,哪个删除了,并在原数组打上对应的标记
时间: 2024-10-23 21:11:57 浏览: 14
Vue 通过公共字段,拼接两个对象数组的实例
在 Vue2 中,你可以使用 JavaScript 的一些内置方法以及 Lodash 或者 lodash-es 这样的库来比较两个数组对象并找出差异。以下是基本步骤:
1. 安装 lodash-es (如果尚未安装):
```bash
npm install lodash-es --save
```
2. 使用 `_.isEqual` 对象是否相等,`_.difference` 找出新元素,`_.intersection` 查找共同元素,`_.union` 获取所有唯一元素:
```javascript
import _ from 'lodash-es';
function compareArrays(arr1, arr2) {
// 判断两个数组是否完全一样
const areEqual = _.isEqual(arr1, arr2);
if (!areEqual) {
// 新增元素
const added = _.difference(arr2, arr1);
// 删除元素
const removed = _.difference(arr1, arr2);
// 使用原数组,遍历添加和删除标记
for (let i = 0; i < arr1.length; i++) {
if (_.includes(added, arr1[i])) {
arr1[i].isAdded = true;
} else if (_.includes(removed, arr1[i])) {
arr1[i].isRemoved = true;
} else {
delete arr1[i].isAdded;
delete arr1[i].isRemoved;
}
}
// 如果有剩余的新元素未标记,添加到arr1
arr1.push(...added.map(item => ({ ...item, isAdded: true })));
}
return { areEqual, added, removed };
}
// 示例
const arr1 = [{ id: 1 }, { id: 2 }];
const arr2 = [{ id: 1, isNew: true }, { id: 2 }, { id: 3 }];
compareArrays(arr1, arr2).then(({ areEqual, added, removed }) => {
console.log('areEqual:', areEqual);
console.log('added:', added);
console.log('removed:', removed);
});
```
在这个例子中,我们假设每个对象有一个 `id` 属性作为唯一标识。函数会返回一个对象,包含两个数组 (`added` 和 `removed`) 和它们是否相等的结果。
阅读全文