ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript中的多字段比较

2019-11-22 14:33:57  阅读:280  来源: 互联网

标签:compare comparison javascript


在给定的searchObject规范下,是否有任何简便的方法可以在以下列表中查找项目?

var list = [
    { id:1, name: "foo", description: "description 1" },
    { id:2, name: "bar", description: "description 2" },
    { id:3, name: "baz", description: "description 3" },
];

var searchObject = { id: 2, name: "bar" };

searchObject不一定具有列表中项目的所有属性.我需要属性之间的运算符为AND(id == 2&& name ==“ bar”).以下是我想出的. javascript中有什么可以做到这一点的吗?

for (var i in list) {
    var found = true;
    for (var p in searchObject) {
        if (list[i][p] !== searchObject[p]) {
            found = false;
            break;
        }
    }
    if(found) return list[i];
}

解决方法:

不,没有本机的方法.某些人可能更喜欢以下内容,因为它具有更多的JavaScript功能,但它当然不具备原始版本所具有的出色浏览器支持.

var matches = list.filter(function(arrElem){
    return Object.keys(searchObject).every(function(prop){
        return searchObject[prop] === arrElem[prop];
    });
});

请注意,这将返回具有所有匹配项的数组,而不仅仅是像您这样的第一个匹配项.还要注意,与您的不同,尽管您可能不想搜索继承的属性,但这不会测试searchObject上的继承的可枚举属性.

ps,其中许多“我希望js拥有更好的X方式”的愿望都可以通过underscore.js来满足.特别是,您追求的是findWhere方法:

var match = _.findWhere(list, searchObject);

标签:compare,comparison,javascript
来源: https://codeday.me/bug/20191122/2060412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有