【发布时间】:2018-05-07 20:48:52
【问题描述】:
我正在尝试采用更实用的方法来显示数据,但在从数组中删除重复项时遇到了麻烦。我想要实现的是删除和/或合并相同日期的项目。
我尝试使用_.uniqBy,但它只返回未触及的列表,因为它是一个日期对象,因此。
new Date(2018, 4, 7) === new Date(2018, 4, 7)
//false
new Date(2018, 4, 7) == new Date(2018, 4, 7)
//false
有没有一种方法可以使用uniqBy 或其他在函数方法中合并或删除重复项的方法进行深度匹配。
注意:对象/函数已被简化为问题。
const items = [{date: new Date(2018, 4, 7), wellbeing: 50}];
const days = [{date: new Date(2018, 4, 7)}, {date: new Date(2018, 4, 8)}];
const Row = (item) => item; // not real map just mock
function mapToRow(data) {
return _.pipe([
sortByDate,
_.uniqBy('date'),
_.map(Row)
])(data)
}
function sortByDate(array) {
return array.sort((a, b) => {
a = new Date(a.date);
b = new Date(b.date);
return a < b ? -1 : a > b ? 1 : 0;
});
}
console.log(mapToRow(days.concat(items)));
<script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js"></script>
可以使用moment等lib
//预期结果
[{date: new Date(2018, 4, 7), wellbeing: 50}, {date: new Date(2018, 4, 8)}]
【问题讨论】:
标签: javascript ecmascript-6 lodash