javascript - 查找动态数组的对象元素 Javascript 中的公共(public)元素

标签 javascript arrays ecmascript-6

关于这个主题有很多问题,但我找不到直接解决我遇到的问题的答案。

这是一个: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/

相关文章:

javascript - Jquery 自动完成,如果未找到匹配项,则在下拉列表中显示 "no matches found",但不允许关注它

javascript - 是否需要用 new 来调用 es6 类?

javascript - 当使用 Promise.reject 生成数组时,我得到了成功响应

javascript - 如何有条件地在数组中添加或删除元素

javascript - 我有一个未捕获的 ReferenceError : response is not defined exception when I am trying to get service

javascript - Jquery/bootstrap 模态位于特定的 Angular 5 组件之上

javascript - WordPress - 根据 JQuery 注册脚本

objective-c - 将 NSString 转换为 char str[]

c++ - 使用 C++11 将数组设置为零

arrays - 在嵌套函数中更新静态数组而不创建临时数组? < Julia >