繁体   English   中英

使用javascript中的不同键在“对象数组”中查找重复项

[英]Find duplicates in "Array of objects" with different keys in javascript

给定一个对象数组。 例如

let letters= [{"a":1,"b":2,"c":7}, {"d":4,"c":21,"f":2}, {"g":34,"c":2} ]

我想找到所有三个对象中的键是通用的。 在这种情况下 C. 在输出上,我想看到“c”。 价值不重要现在只是关键。 我知道如何使用相同的密钥(例如 id)来实现,但不知道如何使用不同的密钥。 谢谢您的帮助

  1. 迭代对象数组并构建键计数图
  2. 过滤映射到等于数组中元素数的计数
  3. 归还钥匙

 const letters = [{"a":1,"b":2,"c":7}, {"d":4,"c":21,"f":2}, {"g":34,"c":2}] const counts = letters.reduce((map, o) => { Object.keys(o).forEach(key => { map.set(key, (map.get(key) ?? 0) + 1) }) return map }, new Map()) const duplicates = [...counts].filter(([ _, count ]) => count === letters.length) .map(([ key ]) => key) console.info(duplicates)

 let letters= [{"a":1,"b":2,"c":7}, {"d":4,"c":21,"f":2}, {"g":34,"c":2}] let result = letters .map(group => Object.keys(group)) .reduce((arr, v) => arr ? arr.filter(key => v.includes(key)) : v, null) console.log(result)

这将为您提供数组中的所有常用键。

 const letters = [{"a":1,"b":2,"c":7}, {"d":4,"c":21,"f":2}, {"g":34,"c":2}]; const arrayCommonElements = (arr1, arr2) => { const counts = {}; [...arr1, ...arr2].forEach(e => counts[e] = counts[e] ? counts[e] + 1 : 1); return Object.keys(counts).filter(e => counts[e] > 1); } let result = letters .map(group => Object.keys(group)) .reduce((arr, v) => arr ? arrayCommonElements(arr,v) : v, null) console.log(result)

使用forEach循环和一次键迭代并维护track对象以计算出现次数。 迭代后,如果某些键重复到元素计数,则表示该键全部存在。

 const commonKeys = (arr) => { const track = {}; arr.forEach((obj) => Object.keys(obj).forEach( (letter) => (track[letter] = (track[letter] ?? 0) + 1) ) ); return Object.keys(track).filter((letter) => track[letter] >= arr.length); }; let letters = [ { a: 1, b: 2, c: 7 }, { d: 4, c: 21, f: 2 }, { g: 34, c: 2 }, ]; console.log(commonKeys(letters));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM