前言
今天做项目碰到一个问题,需要判断两个这样string[]
格式的数组是否相等。特此记录下
思考
判断的两个数组的格式:
const arr1 = ['a','b','c']
const arr2 = ['b','a','c']
要判断这两个数组是否相等。首先我们肯定是先排序
const arr1 = ['a','b','c'].sort(); // ['a','b','c']
const arr2 = ['b','a','c'].sort(); // ['a','b','c']
直接判断 arr1 === arr2
吗,这样是不行的,arr1和arr2只是数组内存地址的引用,各自的地址肯定不一样的,所以一定不行的
[注意] 变量通常保存对象,都是保存的内存指针
我们仔细想想,JavaScript中我们通常回去判断 字符串是否相当,数值是否相当。同理我们把数组转换成字符串不就可以了吗。
实现
const v1 = JSON.stringify(['a','b','c'].sort()); // '['a','b','c']'
const v2 = JSON.stringify(['b','a','c'].sort()); // '['a','b','c']'
v1 === v2 就是true了
方法实现:
import { uniq } from "lodash";
export const toEqualArr = (...arg) => {
return (
uniq(
arg.map(item => {
return JSON.stringify(item.sort());
})
).length <= 1
);
};
其实配合lodash的flatten也可以实现相同的效果,这里就不写了...