@wordpress/is-shallow相等

用于在两个对象或数组之间执行浅层比较的函数。当两个值的所有成员严格等于另一个值的相应成员时,这两个值具有浅相等性。

用法

默认导出@wordpress/is-shallow相等是一个接受两个对象或数组的函数:

从“@wordpress/is-shallow-equal”导入isShallowEqual;是浅相等({a:1},{a:1,b:2});//⇒错误是浅相等({a:1},{a:1{);//⇒正确是浅相等([1],[1],2]);//⇒错误是浅相等([1],[1]);//⇒正确

如果您已经知道正在使用的值的类型,则可以导入特定的实现:

从“@wordpress/is-shallow equal”导入{isShallowEqualArrays};从“@wordpress/is-shallow equal”导入{isShallowEqualObjects};

浅比较与深比较的不同之处在于,它将每个成员的成员进行严格相等的比较,这意味着数组和对象将根据它们的参考文献,而不是根据其值(另请参见JavaScript中的对象相等.)在必须按值比较嵌套对象的情况下,请考虑使用快速深度相等而不是。

从“@wordpress/is-shallow-equal”导入isShallowEqual;从'fast-dep-equal/es6'导入fastDeepEqual;//深度比较让对象={a:1};是浅相等([{a:1}],[{a=1}]);//⇒错误快速深度相等([{a:1}],[{a:1}]);//⇒正确isShallowEqual([对象],[对象]);//⇒正确

理论基础

浅薄的平等公用事业已经是一大笔钱了。由于这些操作通常是关键热代码路径的核心,WordPress贡献者有一些特定的需求,而现有的解决方案只能部分满足这些需求。

特别是,它应该…

  1. ……将非本原但参照平等的成员价值观视为平等。
  2. …提供一个单独的函数,通过该函数进行接口,而不考虑值类型。
  3. …成为赤骨;只提供了浅相等的基本功能。
  4. ……预测并优化参考相同性。
  5. …用于非Facebook项目。
  6. …是性能最好的实现。

基准

以下结果是在MacBook Pro(2016年末)2.9 GHz Intel Core i7上的Node v10.15.3(LTS)下生成的。

@wordpress/is-shallow-equal(特定类型)(对象,相等)x 4519009操作/秒±1.09%(采样90次)>@wordpress/is-shallow-equal(特定类型)(对象,相同)x 795527700操作/秒±0.24%(93次采样)>@wordpress/is-shallow-equal(特定类型)(对象,不相等)x 4841640操作/秒±0.94%(93次采样)>@wordpress/is-shallow-equal(特定类型)(数组,相等)x 106393795操作/秒±0.16%(94次采样)>@wordpress/is-shallow-equal(特定类型)(数组,相同)x 800741511操作/秒±0.22%(采样95次)>@wordpress/is-shallow-equal(特定类型)(数组,不相等)x 49178977 ops/sec±1.99%(82次采样)

@wordpress/is-shallow-equal(对象,相等)x 4449367操作/秒±0.31%(91次采样)>@wordpress/is-shallow-equal(对象,相同)x 796677179操作/秒±0.23%(94次采样)>@wordpress/is-shallow-equal(对象,不相等)x 4989529操作/秒±0.30%(91次采样)>@wordpress/is-shallow-equal(数组,相等)x 44840546 ops/sec±1.18%(采样89次)>@wordpress/is-shallow-equal(数组,相同)x 794344723次操作/秒±0.24%(91次采样)>@wordpress/is-shallow-equal(数组,不相等)x 49860115操作/秒±1.73%(采样85次)

浅相等(对象,相等)x 3702126操作/秒±0.87%(92次采样)>浅相等(对象,相同)x 796649597操作/秒±0.21%(92次采样)>浅相等(对象,不相等)x 4027885操作/秒±0.31%(96次采样)>浅相等(阵列,相等)x 1684977操作/秒±0.37%(94次采样)>浅相等(阵列,相同)x 794287091操作/秒±0.26%(91次采样)>浅相等(阵列,不相等)x 1738554操作/秒±0.29%(91次采样)

浅相等(特定类型)(对象,相等)x 4669656操作/秒±0.34%(采样92次)>浅相等(特定类型)(对象,相同)x 799610214操作/秒±0.20%(采样95次)>浅相等(特定类型)(对象,不相等)x 4908591操作/秒±0.49%(93次采样)>浅相等(特定类型)(阵列,相等)x 104711254操作/秒±0.65%(91次采样)>浅相等(特定类型)(阵列,相同)x 798454281操作/秒±0.29%(94次采样)>浅相等(特定类型)(阵列,不相等)x 48764338操作/秒±1.48%(采样84次)

is-equal-shallow(对象,相等)x 5068750操作/秒±0.28%(92次采样)>is-equal-shallow(对象,相同)x 17231997 ops/sec±0.42%(92次采样)>is-equal-shallow(对象,不相等)x 5524878 ops/sec±0.41%(92次采样)>is-equal-shallow(阵列,相等)x 1067063 ops/sec±0.40%(92次采样)>is-equal-shallow(阵列,相同)x 1074356 ops/sec±0.20%(94次采样)>is-equal-shallow(阵列,不相等)x 1758859 ops/sec±0.44%(92次采样)

浅相等(对象,相等)x 8380550操作/秒±0.31%(采样90次)>浅相等(对象,相同)x 27583073操作/秒±0.60%(91次采样)>浅相等(对象,不相等)x 8954268操作/秒±0.71%(92次采样)>浅相等(阵列,相等)x 104437640操作/秒±0.22%(采样96次)>浅相等(阵列,相同)x 141850542操作/秒±0.25%(93次采样)>浅相等(阵列,不等)x 47964211操作/秒±1.51%(采样84次)

fbjs/lib/shallowEqual(对象,相等)x 3366709操作/秒±0.35%(采样93次)>fbjs/lib/shallowEqual(对象,相同)x 794825194 ops/sec±0.24%(94次采样)>fbjs/lib/shallowEqual(对象,不相等)x 3612268 ops/sec±0.37%(94次采样)>fbjs/lib/shallowEqual(数组,相等)x 1613800 ops/sec±0.23%(采样90次)>fbjs/lib/shallowEqual(数组,相同)x 794861384 ops/sec±0.24%(93次采样)>fbjs/lib/shallowEqual(数组,不相等)x 1648398 ops/sec±0.77%(92次采样)

您可以通过克隆存储库、安装依赖项并运行基准/索引.js脚本:

git克隆https://github.com/WordPress/gutenberg.gitnpm安装npm运行构建:包节点/软件包/is-shallow-equal/benchmark

参与此包

这是古腾堡项目的一部分。该项目组织为单回购。它由多个独立的软件包组成,每个包都有特定的用途。此monorepo中的包发布到净现值法并由使用WordPress(文字出版社)以及其他软件项目。

要了解更多关于对这个包或古腾堡整体贡献的信息,请阅读该项目的主要内容贡献者指南.