我有一个数组:
const myArray1 = [{tags: ['tag-1', 'tag-2']}, {tags: ['tag-1']}, {tags: ['tag-5', 'tag-8']}]和一个array2:
const myArray2 = [
{
tags: [
"tag-122",
"tag-1",
"tag-2",
"tag-12"
]
},
{
tags: [
"tag-1",
"tag-10",
"tag-12"
]
},
{
tags: [
"tag-5"
]
}
];我想要一个数组
const resultArray = [{tags: ['tag-1', 'tag-2'], count: 2}, {tags: ['tag-1'], count: 2}, {tags: ['tag-5', 'tag-8'], count: 1}]对于myArray1中的每个元素,检查myArray1中的任何数组标记元素是否包含在myArray2中。如果包含,则查找出现次数的计数。
我尝试创建一个myArray2标记数组,然后为myArray1的每个元素在数组中找到出现的情况。
const result = myArray2.reduce((acc, el) => {
el.tags && el.tags.map(tag => acc.push(tag));
return acc;
}, []);发布于 2019-07-19 20:16:48
为了降低计算复杂度,我会将myArray2转换成一个集合数组,然后.map array2并检查正在迭代的标记的.some是否存在于集合中,并计算reduce出现的次数。
const myArray1=[{tags:["tag-1","tag-2"]},{tags:["tag-1"]},{tags:["tag-5","tag-8"]}],
myArray2=[{tags:["tag-122","tag-1","tag-2","tag-12"]},{tags:["tag-1","tag-10","tag-12"]},{tags:["tag-5"]}];
const arr2Sets = myArray2.map(({ tags }) => new Set(tags));
const resultArray = myArray1.map(({ tags }) => {
const count = arr2Sets.reduce(
(a, set) => a + tags.some(tag => set.has(tag)),
0
);
return { tags, count };
});
console.log(resultArray);
https://stackoverflow.com/questions/57119091
复制相似问题