使用lodash只使用密钥查找数组的差异

时间:2018-03-19 16:50:46

标签: javascript node.js

如何找到数组A中的所有值 - 其中键不在数组B中(有点像SQL Not In)。我不想比较整个数组,只是一个属性 - 但我确实希望使用lodash(或更简单)返回差异的所有字段

const arrayA = [
  { sku:"1", name:"one"},
  { sku:"2", name:"two"}
]
const arrayB = [
  { sku:"1", name:"One Product"},
  { sku:"2", name:"Two Product"},
  { sku:"3", name:"Three Product"}
]

结果应该是:

{ sku:"3", name:"Three Product"}

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

你也可以使用:

const arrayA = [
  { sku:"1", name:"one"},
  { sku:"2", name:"two"}
];
const arrayB = [
  { sku:"1", name:"One Product"},
  { sku:"2", name:"Two Product"},
  { sku:"3", name:"Three Product"}
];

let diff = _.differenceWith(arrayB, arrayA, (a, b) => _.isEqual(a.sku, b.sku) );

答案 1 :(得分:0)

你真的不需要lodash。 您需要的是过滤第二个数组并消除第一个数组中存在的所有元素。

const arrayA = [
  { sku:"1", name:"one"},
  { sku:"2", name:"two"}
]
const arrayB = [
  { sku:"1", name:"One Product"},
  { sku:"2", name:"Two Product"},
  { sku:"3", name:"Three Product"}
]

console.log(
  // filter B such that we only leave items from B that are not in A
  arrayB.filter(b => 
    !arrayA.some(a => a.sku === b.sku)
  )
)