我有一组对象。
var $arr = [
{'product': 1, 'quantity': 4, 'service': 'AC'},
{'product': 2, 'quantity': 5, 'service': 'TV'},
{'product': 1, 'quantity': 3, 'service': 'AC'}
];
使用此数组我需要删除“product”和“service”键都匹配的任何对象。我需要做的另一件事是,如果两个或多个对象之间存在匹配,则取每个对象的“数量”值并计算总和。
我一直在用lodash来试图欺骗这个。虽然我觉得我找到一个解决方案并不是太遥远,但我似乎无法确定问题的最后一部分,并且如果匹配则将“数量”值相加在一起。
console.log(_.uniqBy($arr, function(v) {
return v.product === 1;
}));
这是否可行或我是否需要重新考虑我对此问题的处理方法。另外,我很担心我无法使用ES6,这是一种耻辱。
感谢您的帮助。
答案 0 :(得分:1)
使用_.groupBy()
收集具有相同产品和服务值的对象到数组,然后使用_.mergeWith()
将每个数组合并为一个。
该示例使用ES6箭头函数和数组传播:
var $arr = [{"product":1,"quantity":4,"service":"AC"},{"product":2,"quantity":5,"service":"TV"},{"product":1,"quantity":3,"service":"AC"}];
var result = _($arr)
// group the object by product and service
.groupBy(({ product, service }) => product + service)
// merge each group, and if the key is quantity add the numbers
.map((g) => _.mergeWith(...g, (o, s, k) => k === 'quantity' ? o + s : o))
.value();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>