如何在nodejs中使用lodash/underscore找到两个数组之间的差异

Fir*_*lam 18 javascript underscore.js lodash

我有两个数组阵列,我试图找到差异.

var a = [[ 11, 24, 28, 38, 42, 44 ],
  [ 7, 19, 21, 22, 29, 38 ],
  [ 2, 21, 27, 30, 33, 40 ],
  [ 6, 11, 12, 21, 34, 48 ],
  [ 1, 10, 17, 31, 35, 40 ],
  [ 1, 18, 26, 33, 36, 45 ],
  [ 15, 21, 22, 24, 38, 46 ],
  [ 5, 17, 21, 27, 29, 41 ],
  [ 3, 7, 12, 16, 20, 28 ],
  [ 9, 12, 13, 18, 30, 37 ],
  [ 3, 19, 21, 31, 33, 46 ],
  [ 6, 11, 16, 18, 20, 34 ],
  [ 1, 3, 11, 13, 24, 28 ],
  [ 12, 13, 16, 40, 42, 46 ],
  [ 1, 3, 5, 36, 37, 41 ],
  [ 14, 15, 23, 24, 26, 31 ],
  [ 7, 13, 14, 15, 27, 28 ]];

var b = [[ 4, 7, 9, 21, 31, 36 ],
  [ 2, 5, 6, 12, 15, 21 ],
  [ 4, 7, 8, 15, 38, 41 ],
  [ 11, 24, 28, 38, 42, 44 ],
  [ 7, 19, 21, 22, 29, 38 ]];
Run Code Online (Sandbox Code Playgroud)

我怎么找到:

c = [[ 2, 21, 27, 30, 33, 40 ],
  [ 6, 11, 12, 21, 34, 48 ],
  [ 1, 10, 17, 31, 35, 40 ],
  [ 1, 18, 26, 33, 36, 45 ],
  [ 15, 21, 22, 24, 38, 46 ],
  [ 5, 17, 21, 27, 29, 41 ],
  [ 3, 7, 12, 16, 20, 28 ],
  [ 9, 12, 13, 18, 30, 37 ],
  [ 3, 19, 21, 31, 33, 46 ],
  [ 6, 11, 16, 18, 20, 34 ],
  [ 1, 3, 11, 13, 24, 28 ],
  [ 12, 13, 16, 40, 42, 46 ],
  [ 1, 3, 5, 36, 37, 41 ],
  [ 14, 15, 23, 24, 26, 31 ],
  [ 7, 13, 14, 15, 27, 28 ]];
Run Code Online (Sandbox Code Playgroud)

我试过下划线:

_ = require('underscore');
_.difference(a,b);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我也尝试过lodash:

_ = require('lodash');
_.differenceBy(a,b);
Run Code Online (Sandbox Code Playgroud)

但它也不起作用.

我在这做错了什么?

小智 38

使用_.differenceWith并传递比较两个数组的比较器,如:

_.differenceWith(a, b, _.isEqual);
Run Code Online (Sandbox Code Playgroud)

  • 我也刚刚发现`_.xor()`,我认为它更整洁:).https://lodash.com/docs/4.17.4#xor (6认同)
  • 我想指出的是,args 的顺序对于 `_.differenceBy` 和 `_.difference` 很重要。在`_.differenceBy` (lodash) 的文档中,它指出:“结果值的顺序和引用由第一个数组决定。” 经过一些测试,我意识到如果第二个数组更长,则结果数组没有来自第二个数组的值。文档中`_.difference` 的例子似乎是一个糟糕的选择,是`_.difference([2, 1], [2, 3]); // 返回 [1]`。这让我想知道如果您的数组是 eq 长度,您将如何获得 `[1, 3]`,这正是我所需要的。 (2认同)
  • 我有同样的问题。在这种情况下(对于单级数组,因此避免使用“With”变体),您可以通过“_.difference(_.union(a, b), _.intersection(a, b))”来完成 (2认同)

KFu*_*unk 14

如@ dsl101所述,

_.xor([1, 2, 3], [2, 3, 4]);
// [1, 4]
Run Code Online (Sandbox Code Playgroud)