proYang/outils

关于 arrayEqual 的一些意见。

Opened this issue · 6 comments

pftom commented

不知道主人是想做 shadow equal 还是 deep equal,感觉是两种都想实现,但都实现得不太好。想法如下,如果有错误的还请指出,一起进步哈🙃

首先,如果是第一行代码:

if (arr1 === arr2) return true;

这行代码貌似是想来个 shadow equal,就是只比较两数组引用相等,而不是两个数组的每个值相等。

然后呢,后面的几行代码又有点想做deep equal的味道,就是比较两个数组每个值都相等,那么他们相等。

所以建议写两个equal 函数:

// arrayShadowEqual.js
function arrayShadowEqual(arr1, arr2) {
  if (arr1 === arr2) return true;
  return false;
}
// arrayDeepEqual.js
function arrayDeepEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (var i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) {
      return false;
    }
  return true;
}

再提一个小建议哈, JavaScript中不等应该要坚持使用 !==
(完)

  1. 第一次听说shadow equal,不知道是什么意思,望详解
    image

  2. 代码也没写错,因为引用相同的情况,就没必要做后续的对比了。

不过对比Lodash.isEqual来说,算是比较浅的比较了

这里单纯的想比较一下,两个数组是否相等。是一个浅层次的比较,只比较了数组内第一层元素是否相等。
如果需要深相等( deepEqual ),建议像Lodash一样,单独抽一个模块deepEqual出来。:stuck_out_tongue_winking_eye:

@proYang

我觉得像arrayEqual, debounce, throttle这些lodash有的功能,就可以直接用lodash的了,不用分心去维护

@CoderIvan 恩,同意,也推荐这么做。只要能在用的时候,用最高的效率实现出来就是最完美的。封装个人的工具库,更多的是对第三方库功能的补充。看个人需求。

pftom commented

@CoderIvan @proYang 好吧,你们都是对的,我一下脑袋抽风了😭