前言

今天做项目碰到一个问题,需要判断两个这样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也可以实现相同的效果,这里就不写了...

Copyright © frankshi.com 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-06-14 08:15:14

results matching ""

    No results matching ""