在 "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)来做到这一点,但不知道如何使用不同的键。感谢帮助
- 迭代对象数组并构建键计数映射
- 向下映射到等于数组中元素数的计数的过滤器
- 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));
给定一个对象数组。例如
let letters= [{"a":1,"b":2,"c":7}, {"d":4,"c":21,"f":2}, {"g":34,"c":2} ]
我想找到所有三个对象中的键是通用的。在这种情况下 c。在输出中我想看到“c”。该值现在无关紧要,只是关键。我知道如何使用相同的键(例如 id)来做到这一点,但不知道如何使用不同的键。感谢帮助
- 迭代对象数组并构建键计数映射
- 向下映射到等于数组中元素数的计数的过滤器
- 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));