【发布时间】:2019-01-03 09:00:05
【问题描述】:
所以我有一个对象数组如下:
var array = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
我想根据name、amount 和date 是否重复来过滤数据。
这个甚至不过滤重复的名称。
var unique = array.filter((v, i, a) =>{ return a.indexOf(v) === i});
如何根据name、amount 和date 过滤此重复项?
【问题讨论】:
-
不清楚:曾经有 2 个项目具有相同的
name值但不同的date和amt。您是否需要排除它们? -
最简单的解决方案是将该数组唯一化3次:
array = _.uniqBy(array, 'name'); array = _.uniqBy(array, 'date'); array = _.uniqBy(array, 'amt');但效率不高 -
@skyboyer NO.仅当 3 个值重复时。
-
@ramj 然后通过答案检查(第二种解决方案)
_.uniq(array);,只有你需要 lodash 库 -
@Sylwester 不正确 -
indexOf函数在传递对象时只会比较对象的 reference 以在数组中完全匹配,并且不会进行深度比较在其中的键或值上。
标签: javascript arrays duplicates