我试图根据名称过滤来自两个对象数组的对象以及使用lodash的几个条件。这是阵列
var param1 = [{'name': 'sa', 'value':'sample'},
{'name': 'sam', 'value':''}];
var param2 = [{'name': 's1', 'value':'ex1'},
{'name': 's2', 'value':'ex2'},
{'name': 's3', 'value':'ex3'},
{'name': 'sa', 'value':'ex4'}];
我想在param2中检查param1 [名称]存在的对象,如果是,则返回param1对象以及param2中剩余的其余对象。所以最后的结果必须是这样的:
result= [{'name': 's1', 'value':'ex1'},
{'name': 's2', 'value':'ex2'},
{'name': 's3', 'value':'ex3'},
{'name': 'sa', 'value':'sample'}];
我尝试了几个lodash函数,例如_.filter
,_.map
,_.difference
,但我对如何链接此功能并获得适当的结果一无所知。
答案 0 :(得分:1)
不要以为你需要lodash,你可以使用数组forEach 执行它
var param1 = [{
'name': 'sa',
'value': 'sample'
}, {
'name': 'sam',
'value': ''
}];
var param2 = [{
'name': 's1',
'value': 'ex1'
}, {
'name': 's2',
'value': 'ex2'
}, {
'name': 's3',
'value': 'ex3'
}, {
'name': 'sa',
'value': 'ex4'
}];
param1.forEach(function(item) {
param2.forEach(function(item2){
if(item.name ==item2.name){
item2.value = item.value
}
})
})
console.log(param2)
答案 1 :(得分:1)
使用Lodash,使用它提供的一些数组函数可以想到几种方法:
function comparator(a, b) {
return a.name === b.name;
}
// First way.
var res = _.intersectionWith(_.unionWith(param1, param2, comparator), param2, comparator);
// Second way.
var res1 = _.differenceWith(param2, _.intersectionWith(param1, param2, comparator), _.isEqual).concat(_.intersectionWith(param2, param1, comparator));
第一个解决方案更明显一点:
第二种解决方案有点麻烦,但使用差异(在帖子中提到):
这是fiddle。希望它有所帮助。
答案 2 :(得分:0)
var param1 = [{'name': 'sa', 'value':'sample'}, {'name': 'sam', 'value':''}];
var param2 = [{'name': 's1', 'value':'ex1'}, {'name': 's2', 'value':'ex2'}, {'name': 's3', 'value':'ex3'}, {'name': 'sa', 'value':'ex4'}];
_.forEach(param1, a => {
var o = _.find(param2, b => a.name === b.name);
if (o) {
o.value = a.value;
}
});
console.log(param2);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
普通ES6 Javascript
var param1 = [{'name': 'sa', 'value':'sample'}, {'name': 'sam', 'value':''}];
var param2 = [{'name': 's1', 'value':'ex1'}, {'name': 's2', 'value':'ex2'}, {'name': 's3', 'value':'ex3'}, {'name': 'sa', 'value':'ex4'}];
param1.forEach(a => {
var o = param2.find(b => a.name === b.name);
if (o) {
o.value = a.value;
}
});
console.log(param2);
&#13;