簡體   English   中英

在動態數組的對象元素Javascript中查找通用元素

[英]Find common elements within dynamic array's object elements Javascript

關於此主題有很多問題,但是我找不到直接解決我所遇到問題的答案。

這是一個: 使用Javascript在1個數組中查找公共元素

第一個區別是我具有不同類型的數組, 其元素是具有鍵值對的對象 ,其中key是字符串,值是整數數組。

第二個區別是數組是動態的,這意味着有時它可能有零個元素,而有時它可能有3個對象元素。

我在下面共享示例數組:

const array = [
  {"key1":[1,2,3]},
  {"key2":[2,3,4]},
  {"key3":[2,5,6]},
];

第三個區別是元素的順序很 重要,因此最終結果應輸出存在於所有后續數組中的第一個元素的值。

結果應為:

const result = [2];

因為2是這三個元素的唯一共同整數。

如前所述,有時數組中可能只有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()); 

您可以先在不使用其他鍵的情況下獲取數組中的數組,然后查找每個元素(如果它在另一個數組中)。

 let array = [{ key1: [1, 2, 3] }, { key2: [2, 3, 4] }, { key3: [2, 5, 6] }], result = array .map(o => o[Object.keys(o)[0]] || []) .reduce((a, b) => a.filter(c => b.includes(c))); console.log(result); 

const array = [
  {"key1":[1,2,3]},
  {"key2":[2,3,4]},
  {"key3":[2,5,6]},
];

您可以遍歷並存儲每個值在數組中出現每個值的頻率:

var common=new Map();
array.forEach(function(obj){
 //var values=new Set(Object.values(obj)[0]);//make unique values out of array
 var values=Object.values(obj)[0];//no need for uniqueness as OP states that they are already unique..
 values.forEach(function(val){
     common.set(val,(common.get(val)||0)+1);
 });
});

現在,您已經獲得了一個包含所有元素及其在主數組中的外觀的地圖。 所以現在您可以簡單比較一下:

var result=[];
common.forEach(function(appearance,el){
  if(appearance===array.length){
   result.push(el);
  }
});

http://jsbin.com/xuyogahija/edit?console

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM