lodash - 差异也要考虑到quatity

时间:2018-03-10 15:11:32

标签: arrays lodash

我正在尝试从两个数组中获取不同的值。 我使用了lodash中的difference()方法,但这并没有考虑到数量。

例如,我有这两个数组:

var arr1 = [10018, 12285, 12285, 2405, 2413];
var arr2 = [10018, 2405, 12285];

如果我致电difference(),我得到的结果如下:

var difference = _.difference(arr1, arr2) // Result -> [2413]

这是因为12285在第一个阵列上出现两次而在第二个阵列上只出现一次。我希望的结果是将其考虑在内,因此差异数组将是[2413, 12285]

我已经检查了文档,但我没有看到任何方法可以帮助我。

你有什么建议吗?

由于

3 个答案:

答案 0 :(得分:2)



let a = [10018,12285,12285,2405,2413];
let b = [10018,12285,2405];
b.filter((b) => {
	let i = a.indexOf(b);
  	if(i != -1)
  		a.splice(i,1);
})
console.log(a);




没有使用lodash,我不确定使用过滤器解决它是否是一个好方法,但它有效。

答案 1 :(得分:2)

我还没有看到任何可以帮助你的Lodash功能。但是,您可以使用其他功能实现所需的功能。

我认为这个解决方案提供了你想要的东西,但要注意它会改变arr1

var arr1 = [10018, 12285, 12285, 2405, 2413];
var arr2 = [10018, 2405, 12285];

_.forEach(arr2, val => {
  _.pullAt(arr1, _.findIndex(arr1, _.partial(_.isEqual, val)));
});

console.log(arr1);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>

答案 2 :(得分:2)

您可以使用套装从arr2Set arr1创建filter。每当一个项目存在于Set中时,将其从Set中删除并从`arr1:

中过滤掉它

const arr1 = [10018, 12285, 12285, 2405, 2413];
const arr2 = [10018, 2405, 12285];

const result = arr1.filter(function(n) {
  // if an item is in the Set, remove it an return false, else return true
  return this.has(n) ? !this.delete(n) : true;
}, new Set(arr2));

console.log(result);