我正在尝试从两个数组中获取不同的值。
我使用了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]
我已经检查了文档,但我没有看到任何方法可以帮助我。
你有什么建议吗?
由于
答案 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)
您可以使用套装从arr2
和Set 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);