首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中的Intersect3数组-带有片段

Javascript中的Intersect3数组-带有片段
EN

Stack Overflow用户
提问于 2022-10-26 12:38:10
回答 3查看 39关注 0票数 0

我正在尝试交叉array1array2,并找到包含相同name的元素。

然后,在array3上,我只想保留name在第一个交点上存在的元素。

我被困在这里,我只是得到了真实和谎言。有什么帮助吗?

代码语言:javascript
复制
const array1 = [{
  name: 'John'
}];
const array2 = [{
  name: 'Elisa'
}, {
  name: 'John'
}];

const array3 = [{
  name: 'Elisa',
  age: 10
}, {
  name: 'John',
  age: 23
}, {
  name: 'Maria',
  age: 30
}];

const intersectArray = array1.map(elem1 => array2.map(elem2 => elem1.name === elem2.name));

console.log(intersectArray);

const filteredArray = array3.map(elem3 => intersectArray.map(elem => elem.name === elem3.name));

console.log(filteredArray);

预期结果应是:

{ name:'John',年龄: 23 }

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-26 12:44:00

您可以只检查这两个数组,而不是首先创建一个交集:

代码语言:javascript
复制
const array1 = [{ name: 'John' }];
const array2 = [{ name: 'Elisa' }, { name: 'John' }];
const array3 = [{ name: 'Elisa', age: 10 }, { name: 'John', age: 23 }, { name: 'Maria', age: 30 }];

const result = array3.filter(x => 
    array1.some(a => a.name === x.name) &&
    array2.some(a => a.name === x.name))
console.log(result);

票数 1
EN

Stack Overflow用户

发布于 2022-10-26 12:43:34

要执行所需的操作,可以使用filter()只返回满足特定条件的元素。在您的示例中,如果找到匹配的find(),则可以在另一个数组中使用name

这两个步骤都可以使用相同的逻辑:

代码语言:javascript
复制
const array1 = [{ name: 'John' }];
const array2 = [{ name: 'Elisa' }, { name: 'John' }];
const array3 = [{ name: 'Elisa', age: 10 }, { name: 'John', age: 23 }, { name: 'Maria', age: 30 }];

const intersectArray = array1.filter(o1 => array2.find(o2 => o1.name == o2.name));
console.log(intersectArray);

const filteredArray = array3.filter(o3 => intersectArray.find(ia => o3.name === ia.name));
console.log(filteredArray);

票数 0
EN

Stack Overflow用户

发布于 2022-10-26 13:12:25

如果要获取三个数组之间的交集,可以在第一个数组中filter,并在第二个数组中找到一个与some类似的项。

代码语言:javascript
复制
const
  intersection = (a, b, f) => a.filter(x => b.some(y => f(x) === f(y))),
  intersection2 = (f, ...a) => a.reduce((r, b) => intersection(r, b, f));
  
const
  arr1 = [{ name: 'John' }],
  arr2 = [{ name: 'Elisa' }, { name: 'John' }],
  arr3 = [{ name: 'Elisa', age: 10 }, { name: 'John', age: 23 }, { name: 'Maria', age: 30 }];

const
  getName = ({ name }) => name,
  inter1 = intersection(arr3, intersection(arr2, arr1, getName), getName),
  inter2 = intersection2(getName, arr3, arr2, arr1);

console.log(inter1); // Nested calls
console.log(inter2); // Reduction
代码语言:javascript
复制
.as-console-wrapper { top: 0; max-height: 100% !important; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74207922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档