过滤两个数组

时间:2016-11-07 10:39:00

标签: javascript lodash

我有以下数组,

var records = [{ 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 
'name': 'Test', 'type': 'user' },
{ 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 
'name': '9300731e-3c97-4719-8dc2-fcf0a29fd770', 'type': 'register' },
{ 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 
'name': '9300731e-3c97-4719-8dc2-fcf0a29fd772', 'type': 'register' },
];

var registration = [
{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd770', 'id': '123', 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd770'}, 
{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd772', 'id': '456', 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd770'}, 
{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd771', 'id': '789' 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd776'}];

并想要以下输出

result = [
{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd770', 'id': '123'}, 
{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd772', 'id': '456'}]

我基本上希望根据记录数组中的name属性过滤注册数组,因为我需要注册数组中的id值。

我可以使用lodash库中的方法组合来获得所需的输出吗?

2 个答案:

答案 0 :(得分:1)

您可以使用_.intersectionBy

var records = [{ 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 'name': 'Test', 'type': 'user' }, { 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd770', 'type': 'register' }, { 'id': 'ee31ee6a-7f95-49fb-a02f-2a9ef36c2f8b', 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd772', 'type': 'register' }],
    registration = [{ 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd770', 'id': '123', 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd770'}, { 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd772', 'id': '456', 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd770'}, { 'name': '9300731e-3c97-4719-8dc2-fcf0a29fd771', 'id': '789', 'index': '9300731e-3c97-4719-8dc2-fcf0a29fd776'}],
    result = _.intersectionBy(registration, records, "name");

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

答案 1 :(得分:0)

这样的事情应该有效

result = _.filter(registration, x => _.some(records, {name: x.name}))