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

如何根据多字段组合值从JavaScript数组中查询数据?

实现国家数据多字段组合搜索函数

现有国家信息数组如下:

const countryData = [
    {
        id: 1,
        name: 'Afghanistan',
        isoAlpha2: 'AF',
        isoAlpha3: 'AFG',
        isoNumeric: 4,
        currency: {
            code: 'AFN',
            name: 'Afghani',
            symbol: '؋'
        },
        callingCodes: ['+93'],
        languages: ['pus'],
        emoji: '🇦🇫'
    },
    {
        id: 2,
        name: 'Albania',
        isoAlpha2: 'AL',
        isoAlpha3: 'ALB',
        isoNumeric: 8,
        currency: {
            code: 'ALL',
            name: 'Lek',
            symbol: 'L'
        },
        callingCodes: ['+355'],
        languages: ['sqi'],
        emoji: '🇦🇱'
    }
]

需求说明

需要实现一个search函数,支持以name、isoAlpha2、isoAlpha3字段的任意组合作为查询条件(比如search({name: "Afghanistan"})、search({name: "Afghanistan", isoAlpha2: "AF"})这类调用方式),从数组里筛选出匹配的数据。

实现方案

可以用数组的filter方法搭配对象属性遍历,轻松实现多条件组合匹配:

function search(query) {
    // 把查询对象转成键值对数组,方便遍历每个条件
    const queryEntries = Object.entries(query);
    // 过滤出满足所有查询条件的国家
    return countryData.filter(country => {
        return queryEntries.every(([key, value]) => {
            // 只处理指定的三个字段,其他字段直接跳过
            if (!['name', 'isoAlpha2', 'isoAlpha3'].includes(key)) return true;
            // 严格匹配字段值,如需模糊匹配可修改此处逻辑
            return country[key] === value;
        });
    });
}

代码说明

  • 先把查询对象拆解成键值对数组queryEntries,方便逐个检查每个条件;
  • 用filter遍历国家数组,筛选出符合所有条件的项;
  • every方法确保所有查询条件都得满足(相当于逻辑“且”,只要有一个条件不满足就会被排除);
  • 加了字段白名单限制,只处理name、isoAlpha2、isoAlpha3这三个字段,其他无关条件直接忽略;
  • 这里默认用严格相等匹配,如果要支持模糊匹配(比如忽略大小写、搜索包含关键词的内容),可以把匹配逻辑改成:
    return country[key].toLowerCase().includes(value.toLowerCase())
    

使用示例

// 单条件查询,返回阿富汗的对象
console.log(search({name: "Afghanistan"}));
// 多条件组合查询,返回阿富汗的对象
console.log(search({name: "Afghanistan", isoAlpha2: "AF"}));
// 无匹配条件,返回空数组
console.log(search({isoAlpha3: "XYZ"}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:40:28