在 "Array of objects" 中查找重复项,在 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. Return 按键

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对象来计算出现的次数。迭代后,如果某个key重复到元素的count,则表示该key全部存在

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