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

AngularJS中通过对象过滤对象数组的技术实现问询

过滤对象数组:匹配过滤对象的任意属性条目

没问题,这个需求用JavaScript的原生数组方法就能轻松实现。核心思路是利用Array.filter()筛选数组,再结合Object.entries()和Array.some()来检查每个对象是否满足「匹配过滤对象的任意一个键值对」的条件。

先整理合法的待过滤数组

你给出的accounts数组格式有点小问题,我先修正成标准的JavaScript数组:

const accounts = [
  { id: 24, name: 'name24', company: 'company1', location: 'location1' },
  { id: 25, name: 'name25', company: 'company2', location: 'location1' },
  { id: 26, name: 'name26', company: 'company1', location: 'location2' },
  { id: 27, name: 'name27', company: 'company3', location: 'location1' },
  { id: 28, name: 'name28' }
];

实现过滤函数

下面是完整的过滤逻辑,我会逐行解释:

function filterAccounts(accounts, filterObj) {
  // 把过滤对象转换成[key, value]格式的键值对数组
  const filterEntries = Object.entries(filterObj);
  
  // 如果过滤对象为空,直接返回原数组(可选的边界处理)
  if (filterEntries.length === 0) return [...accounts];
  
  // 过滤数组:保留满足任意一个过滤条件的对象
  return accounts.filter(account => {
    // 检查当前对象是否匹配过滤对象中的任意一个键值对
    return filterEntries.some(([key, value]) => {
      // 先确保对象有这个属性,再比较值是否相等
      return account.hasOwnProperty(key) && account[key] === value;
    });
  });
}

示例调用与结果

比如我们定义一个过滤对象,要找company为company1或者location为location2的账户:

const filterObj = { company: 'company1', location: 'location2' };
const filteredAccounts = filterAccounts(accounts, filterObj);

console.log(filteredAccounts);
// 输出结果:
// [
//   { id: 24, name: 'name24', company: 'company1', location: 'location1' },
//   { id: 26, name: 'name26', company: 'company1', location: 'location2' }
// ]

关键逻辑说明

  • Object.entries(filterObj):把过滤对象拆解成键值对数组,比如上面的filterObj会变成[['company', 'company1'], ['location', 'location2']],方便我们遍历每个过滤条件。
  • Array.some():只要有一个过滤条件匹配,就返回true,完美贴合「任意一项匹配就保留」的需求。
  • account.hasOwnProperty(key):避免读取对象不存在的属性导致的潜在问题(比如如果某个账户没有company属性,不会报错)。

如果你的过滤需求有特殊规则(比如模糊匹配、忽略大小写),只需要修改some()里的比较逻辑就行,比如把account[key] === value改成account[key]?.toLowerCase().includes(value.toLowerCase())就能实现大小写不敏感的模糊搜索。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:23