Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于 arrayEqual 的一些意见。 #1

Open
pftom opened this issue Nov 14, 2017 · 6 comments
Open

关于 arrayEqual 的一些意见。 #1

pftom opened this issue Nov 14, 2017 · 6 comments
Labels

Comments

@pftom
Copy link

pftom commented Nov 14, 2017

不知道主人是想做 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中不等应该要坚持使用 !==
(完)

@CoderIvan
Copy link

CoderIvan commented Nov 14, 2017

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

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

@CoderIvan
Copy link

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

@proYang
Copy link
Owner

proYang commented Nov 14, 2017

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

@CoderIvan
Copy link

@proYang

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

@proYang
Copy link
Owner

proYang commented Nov 14, 2017

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

@pftom
Copy link
Author

pftom commented Nov 14, 2017

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

@proYang proYang added the 建议 label Dec 7, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants