lodash javascript 匹配多个参数的重复数组
lodash javascript array of duplicates that match multiple parameters
我有一个数组,为简化起见,我们假设有名字、姓氏和年龄的人。我想为所有具有相同名字、相同姓氏和相同年龄的人创建一个新数组。例如我的起始数组:
[
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21},
{id: 3, first: 'tom', last: 'smith', age: 21},
{id: 4, first: 'fred', last: 'smith', age: 32}
]
我想要 return 匹配 first/last/age 的副本:
[
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21}
]
我正在努力 _.uniq 弄清楚如何做到这一点,我们将不胜感激。
您可以使用 _.groupBy()
对值进行分组,确保它按您确定为重复标准的值进行分组。然后,您可以 _.filter()
每个值按它们累积的数组的长度进行分组,然后 _.flatten()
它以获得最终数组。
var data = [
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21},
{id: 3, first: 'tom', last: 'smith', age: 21},
{id: 4, first: 'fred', last: 'smith', age: 32}
];
var result = _(data)
.groupBy(i => _(i).pick('first', 'last', 'age').values().value())
.filter(i => i.length > 1)
.flatten()
.value();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.2/lodash.js"></script>
我有一个数组,为简化起见,我们假设有名字、姓氏和年龄的人。我想为所有具有相同名字、相同姓氏和相同年龄的人创建一个新数组。例如我的起始数组:
[
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21},
{id: 3, first: 'tom', last: 'smith', age: 21},
{id: 4, first: 'fred', last: 'smith', age: 32}
]
我想要 return 匹配 first/last/age 的副本:
[
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21}
]
我正在努力 _.uniq 弄清楚如何做到这一点,我们将不胜感激。
您可以使用 _.groupBy()
对值进行分组,确保它按您确定为重复标准的值进行分组。然后,您可以 _.filter()
每个值按它们累积的数组的长度进行分组,然后 _.flatten()
它以获得最终数组。
var data = [
{id: 1, first: 'fred', last: 'smith', age: 21},
{id: 2, first: 'fred', last: 'smith', age: 21},
{id: 3, first: 'tom', last: 'smith', age: 21},
{id: 4, first: 'fred', last: 'smith', age: 32}
];
var result = _(data)
.groupBy(i => _(i).pick('first', 'last', 'age').values().value())
.filter(i => i.length > 1)
.flatten()
.value();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.2/lodash.js"></script>