You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按名称属性匹配两个数组对象?求简化方案

简洁实现数组名称匹配需求

给定两个数组,我们需要筛选出数组2中name属性值被数组1任意对象的name属性值包含的元素,以下是两种简洁实现方式:

方法一:高阶函数组合(直观简洁)

利用Array.filter和Array.some的组合,直接完成筛选逻辑:

const array1 = [{name:'danny ro',age:14},{name:'Rose tl', age:17},{name:'Ali ga', age:15}];
const array2 = [{name:'danny',class:'A'},{name:'Ron', class:'D'}];

const result = array2.filter(item2 => 
  array1.some(item1 => item1.name.includes(item2.name))
);

console.log(result); // 输出: [{name:'danny',class:'A'}]

逻辑说明

  • filter遍历数组2,保留符合条件的元素
  • some检查数组1中是否存在任意一个对象的name包含当前数组2元素的name,只要有一个满足就返回true

方法二:预提取名称(性能优化)

如果数组数据量较大,先提取数组1的所有name值,避免每次some都重复遍历数组1,提升执行效率:

const array1 = [{name:'danny ro',age:14},{name:'Rose tl', age:17},{name:'Ali ga', age:15}];
const array2 = [{name:'danny',class:'A'},{name:'Ron', class:'D'}];

// 提前提取数组1的所有name到单独数组
const array1Names = array1.map(item => item.name);

const result = array2.filter(item2 => 
  array1Names.some(name => name.includes(item2.name))
);

console.log(result); // 输出: [{name:'danny',class:'A'}]

扩展:大小写不敏感匹配

如果需要忽略大小写(比如数组1是Danny ro,数组2是danny也能匹配),可以修改判断逻辑:

name.toLowerCase().includes(item2.name.toLowerCase())

内容的提问来源于stack exchange,提问作者Damkulul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:49:53