场景需求
在我们某个项目表格中,我们会在对 类目1合计 和 类目2合计 和 类目3合计 进行比较,因为3种合计其实是通过不同的算法计算出来的,得出来的值应该是一致的,如果三个合计不相同,则我们需要对数据进行标红处理。
解决思路
1.我们首先明白核心要解决的问题,即,三个数字之间的比较,如果三个都相同,我们得到一个true,不相同,得到一个false,根据不同的标识展示不同的样式
2.三个值之间的比较,我们可以简单的用a===b && b===c && a===c来比较,但是考虑到扩展性,如果将来有更多的值比较,采用这种笨方法可能不妥
3.思来想去,我们可以将三个值放在一个数组中,const arr = [a,b,c],使用js的数组进行处理,是最为便捷的一种方案
4.如何判断数组中每一个值相同呢,最简单的就是我们可以通过双重for循环* 比较每一个值是否相同
5.双重for循环?那我们是不是可以通过 数组去重 ,如果最后得到的数组length为1,那么是不是可以证明数组中的值都相同?
6.数字之间的比较 经过抽象化,我们可以理解成 js数组去重 的问题
代码
/**
* @description 判断数据是否相同
* @param {array} rawData 需要对比的数组
*/
isSameData(rawData) {
//确保传入的是数组
if(!Array.isArray(rawData)){
return
}
// 过滤出有效值(排除null和undefined后比较)
const validData = rawData.filter((item) => !!item);
// 数组去重,如果最后数据的length为1,说明值都相等
const onlyData = Array.from(new Set(validData));
if (onlyData.length === 1) {
return true;
} else {
return false;
}
},