如何解决使用lodash根据某些键找到重复的tintin数组?
我有一个像这样的数组
let data = [{x:1,y:2,z:3},{x:1,z:4},{x:11,z:3}]
现在我只想获取x,y,z值相同的那些项目。因此预期的输出应该是
{x:1,z:3}
因为{x:1,z:3}
具有重复的值,但其余部分没有重复,所以我不想得到它们的其余部分,因为它们没有任何重复。请告诉我如何实现?
解决方法
对于lodash $categoryLists = Category::where('display_at_home',1)
->limit(3)
->with(['books' => function($query) {
$query->limit('3');
}])
->get();
,
您可以首先使用4.17.15
和_.uniqWith
查找唯一值。
_.isEqual
然后使用_.uniqWith(data,_.isEqual); // [{x:1,y:2,z:3},{x:1,z:4},{x:11,z:3}]
从数组中删除唯一值,只保留重复项
_.difference
,
let data = [{x:1,z:3}]
function filterDuplicates(data) {
let dic = {};
data.forEach(obj => {
let strObj = JSON.stringify(obj,Object.keys(obj).sort());
if(strObj in dic) {
++dic[strObj];
return;
}
dic[strObj] = 0;
})
return Object.entries(dic).filter(([key,value]) => value > 0).map(([el]) => JSON.parse(el));
}
console.log(filterDuplicates(data));
,
构建一个对象来跟踪重复项,并使用Object.values
和filter
let data = [
{ x: 1,y: 2,z: 3 },{ x: 1,z: 4 },{ x: 11,];
const all = {};
data.forEach(({ x,y,z }) => {
const key = `x${x}y${y}z${z}`;
all[key] = key in all ? { x,z } : null;
});
const res = Object.values(all).filter(Boolean);
console.log(res);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。