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);
上一篇:如何提高 PHP 代码的质量?第三:端到端 / 集成测试


下一篇:mysql-比较同一表中的两个日期范围