使用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.valuesfilter

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);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...