javascript二维数组(3):指定数组元素的特定属性进行搜索

js中对数组, var data = {"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},{"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10},如何按照不同的元素进行搜索?

根据数组元素的特定属性搜索

在JavaScript中,我们可以使用数组的 filter() 方法来根据数组元素的特定属性进行搜索。这个方法会创建一个新的数组,新数组的元素是通过检查指定的函数而符合条件的所有元素。

javascript 复制代码
var data = [
    {"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
    {"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
    {"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];

var result = data.filter(function(item) {
    return item.name === "《西游记》";
});

console.log(result);  // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]

同样,如果我们想按照 "author" 属性搜索 "曹雪芹",我们可以这样做:

javascript 复制代码
var result = data.filter(function(item) {
    return item.author === "曹雪芹";
});

console.log(result);  // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]

封装函数

将上面的代码改进为一个封装函数,以便重复使用。这个函数可以接收两个参数:一个是要搜索的数组,另一个是要搜索的值。函数会返回一个新数组,包含所有匹配的元素。

下面是一个示例:

javascript 复制代码
function searchByProperty(array, property, value) {
    return array.filter(function(item) {
        return item[property] === value;
    });
}

// 使用示例:
var data = [
    {"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
    {"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
    {"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];

var result = searchByProperty(data, 'name', '《西游记》');
console.log(result);  // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]

var result2 = searchByProperty(data, 'author', '曹雪芹');
console.log(result2);  // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]

在这个示例中,searchByProperty 函数接受三个参数:array(要搜索的数组),property(要搜索的属性名称,如 'name' 或 'author'),以及 value(要搜索的值,如 '《西游记》' 或 '曹雪芹')。

多个属性搜索

为了支持按多个属性进行搜索,修改一下 searchByProperty 函数,让 property 参数接受一个属性名称的数组,然后在 filter 函数中检查每个属性是否匹配。

下面是一个示例:

javascript 复制代码
function searchByProperties(array, properties, value) {
    return array.filter(function(item) {
        for (var i = 0; i < properties.length; i++) {
            if (item[properties[i]] === value) {
                return true;
            }
        }
        return false;
    });
}

// 使用示例:
var data = [
    {"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
    {"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
    {"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];

var result = searchByProperties(data, ['name', 'author'], '《西游记》');
console.log(result);  // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]

var result2 = searchByProperties(data, ['author', 'cat'], '曹雪芹');
console.log(result2);  // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]

在这个示例中,searchByProperties 函数接受三个参数:array(要搜索的数组),properties(要搜索的属性名称的数组,如 ['name', 'author'] 或 ['author', 'cat']),以及 value(要搜索的值,如 '《西游记》' 或 '曹雪芹')。函数会返回一个新数组,包含所有在至少一个属性上匹配的元素。


@漏刻有时

相关推荐
CoderYanger9 分钟前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
用户3600555790011 分钟前
Kestrel_VLLM - 26 · 发射空档三步曲:事件计时 → nsys → 判别实验
前端
AIFQuant14 分钟前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发
echome88815 分钟前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
运维行者_18 分钟前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
.YM.Z28 分钟前
优选算法——【双指针算法2】C++实现
开发语言·c++·算法
逆向编程31 分钟前
MATLAB高级数据结构:cell、struct与table深度应用
开发语言·数据结构·matlab
PedroQue9932 分钟前
v0.2.0 架构升级:class + reactive 重塑状态管理
前端·uni-app
鶴哥只手遮天32 分钟前
Angular 22 源码级深度解析-第 02 章 编译链路总览:从模板字符串到 `ɵɵ` 指令
前端·开源·angular.js
尘世中一位迷途小书童32 分钟前
别再堆万字 Prompt:用 Agent Skills 给团队写一个「前端 Review」Skill
前端·ai编程·cursor