![](/img/trans.png)
[英]Find common elements from arrays's which are inside an Object - 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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.