JS文件
export default function comparison(vm, obj = {}) {
// keys 指定需要对比的key
// arr 指定不需要对比的key
// 两个都不传 则默认对比data里面定义的所有的值。
if (!vm) return console.warn('第一个参数需要VM或者VC');
if (typeof obj != 'object') return console.warn('第二个参数是一个JSON对象');
obj.keys = obj.keys || null
obj.arr = obj.arr || []
let { keys, arr } = obj
let obj1 = {}
let obj2 = {}
if (keys && !Array.isArray(keys)) return console.warn('keys参数需要一个数组');
if (keys) {
keys.map(item => {
obj1 = {
...obj1,
[item]: vm.$options.data()[item]
}
obj2 = {
...obj2,
[item]: vm.$data[item]
}
})
}
else {
obj1 = vm.$options.data.call(vm)
obj2 = vm.$data
}
let bl = true
return main(obj1, obj2, arr)
function main(data1, data2, arr = []) {
if (!bl) {
return bl
}
if (typeof data1 == 'object') {
if (Array.isArray(data1)) {
for (let i = 0; i < data1.length; i++) {
main(data1[i], data2[i], arr)
}
} else {
for (let key in data1) {
if (Object.hasOwnProperty.call(data1, key)) {
if (arr.indexOf(key) == -1) {
main(data1[key], data2[key], arr)
} else {
continue
}
}
}
}
} else {
bl = data1 == data2
}
return bl
}
}
vue文件
//抽屉关闭前
handleClose() {
if (comparison(this.$refs.comparisonRef, { arr: ["tableData"] })) {
this.drawerVisible = false;
} else {
this.$confirm("发现数据改动,关闭将不保存数据,是否关闭", "提示")
.then((res) => {
this.drawerVisible = false;
})
.catch();
}
},
这篇主要是针对VUE项目进行的封装,博客里面有针对两组数据进行对比的封装,可以自行查阅。
欢迎各位大佬指导。