好用的方法,数组对象比较并返回差异

/**
 * 方法名:
 * 功能介绍:返回一个对象里面包含后一个数组比第一个数组增加、减少的数据(适用于去重过后的数组)
 * 参数:
 * beforeArr:前一个数组
 * afterArr:后一个数组
 */
const compare = (beforeArr, afterArr) => {
	let resObj = {
		insertList: [],
		deleteList: [],
		updateList: [],
		isChange: false,
	};

	let cenMab = new Map();
	//把beforeArr数组去重放入cenObj 
	for (let i = 0; i < beforeArr.length; i++) {
		cenMab.set(JSON.stringify({
			code: beforeArr[i].code, //比对的关键字段code
		}), beforeArr[i])
	}
	//遍历afterArr,查看其元素是否在cenObj中
	for (let j = 0; j < afterArr.length; j++) {
		let typeOne = JSON.stringify({
			code: afterArr[j].code,
		})
		if (cenMab.has(typeOne)) {
			//比对有变化的字段price
			if (cenMab.get(typeOne).price != afterArr[j].price) {
				resObj.isChange = true;
				resObj.updateList.push(afterArr[j].code);
			}
			let r1 = cenMab.delete(typeOne)
		} else {
			resObj.isChange = true;
			resObj.insertList.push(afterArr[j].code);
		}
	}
	// 遍历push剩余删除的数据
	for (let item of cenMab.values()) {
		resObj.isChange = true;
		resObj.deleteList.push(item.code);
	}
	return resObj
}

  

posted on 2024-08-13 16:26  朝颜陌  阅读(12)  评论(0编辑  收藏  举报

导航