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

如何用TypeScript判断数组元素是否存在于对象数组的code属性中?

检查数组元素是否存在于对象数组的指定属性中

首先来看给定的两个数组:

const array1 = ['A', 'B', 'C', 'D'];

const array2 = [
  {category: 'photos', code: 'A', fileName: '1664725062718.jpg', size: 120306},
  {category: 'photos', code: 'F', fileName: '1664725062718.jpg', size: 120306},
  {category: 'photos', code: 'K', fileName: '1664725062718.jpg', size: 120306},
];

需求是编写一个函数,判断array1中的任意元素是否存在于array2中对象的code属性,并返回布尔值。

之前尝试的代码无法正常工作:

array1.some(value => array2.includes(value))

原因是array2的元素是对象,includes会直接比较引用值,而不是对象的code属性,所以无法匹配到目标值。


正确的TypeScript实现方案

方案1:嵌套使用some方法

这种方式逻辑直观,直接遍历两个数组完成匹配检查:

const hasMatchingCode = array1.some(value => 
  array2.some(item => item.code === value)
);
  • 外层array1.some遍历每个元素,只要有一个元素满足条件就返回true
  • 内层array2.some检查当前array1元素是否存在于某个对象的code属性中

方案2:利用Set优化性能(推荐大数据量场景)

如果数组元素较多,先提取array2的code到Set中再查找,能将时间复杂度从O(n*m)降低到O(n+m),大幅提升性能:

// 提取所有code到Set集合
const codeSet = new Set(array2.map(item => item.code));
// 检查array1是否有元素在Set中
const hasMatchingCode = array1.some(value => codeSet.has(value));

带类型定义的完整封装

如果需要严格的类型约束,可以定义对象类型并封装成可复用函数:

// 定义array2元素的类型
interface FileItem {
  category: string;
  code: string;
  fileName: string;
  size: number;
}

const array1: string[] = ['A', 'B', 'C', 'D'];

const array2: FileItem[] = [
  {category: 'photos', code: 'A', fileName: '1664725062718.jpg', size: 120306},
  {category: 'photos', code: 'F', fileName: '1664725062718.jpg', size: 120306},
  {category: 'photos', code: 'K', fileName: '1664725062718.jpg', size: 120306},
];

// 封装成可复用函数
function hasMatchingCode(arr1: string[], arr2: FileItem[]): boolean {
  const codeSet = new Set(arr2.map(item => item.code));
  return arr1.some(value => codeSet.has(value));
}

// 调用示例
const result = hasMatchingCode(array1, array2); // 返回true,因为'A'存在于array2的code属性中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:25:48