关于这个主题有很多问题,但我找不到直接解决我遇到的问题的答案。
这是一个:Find common elements in 1 array using Javascript
第一个区别是我有不同类型的数组,它的元素是带有键值对的对象,其中键是字符串,值是整数数组。
第二个区别是数组是动态的,这意味着有时它可能有零个元素,有时可能有 3 个对象元素。
我正在分享下面的示例数组:
const array = [
{"key1":[1,2,3]},
{"key2":[2,3,4]},
{"key3":[2,5,6]},
];
第三个区别是元素的顺序很重要,因此最终结果应该输出所有后续数组中存在的第一个元素的值。
结果应该是:
const result = [2];
因为2是这三个元素的唯一公共(public)整数。
正如前面提到的,数组有时可能只有 1 个或 2 个元素,或者没有元素,应该考虑这些情况。
编辑1:按照评论中的要求数组的值是唯一的
最佳答案
由于一个值只能在数组中出现一次,因此您可以连接数组,统计出现的次数,并过滤掉那些不等于原始数组长度的值。
const findRecuring = (array) =>
[...
[].concat(...array.map((o) => Object.values(o)[0])) // combine to one array
.reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map()) // count the appearance of all values in a map
] // convert the map to array of key/value pairs
.filter(([, v]) => v === array.length) // filter those that don't appear enough times
.map(([k]) => k); // extract just the keys
/** Test cases **/
console.log('Several:', findRecuring([
{"key1":[6,1,2,3,8]},
{"key2":[2,6,3,4,8]},
{"key3":[2,5,6,8]},
]).join());
console.log('None: ', findRecuring([
{"key1":[9,0,11]},
{"key2":[2,6,3,4,8]},
{"key3":[2,5,6,8]},
]).join());
关于javascript - 查找动态数组的对象元素 Javascript 中的公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823326/