jQuery - 关于每个JSON键值对数组的值的正则表达式

时间:2015-07-15 15:52:38

标签: arrays regex json jquery-ui-autocomplete key-value

假设您有一组JSON键值对,例如:

var LNsIDs = [
    {2053 : 'Jones'},
    {9862 : 'Roberts'},
    {1567 : 'Collins'},
    {etc}
];

有没有办法只引用这些对的值而不将它们与键分开? (换句话说,没有循环遍历数组并将值提供给新数组。)

我正在为使用常规数组的自动完成功能执行正则表达式。这部分代码如下所示:

$("#lastname").autocomplete({
    source: function(request, response) {
        var esc = $.ui.autocomplete.escapeRegex(request.term);
        var regex = new RegExp("^" + esc, "i");
        var result = $.grep(LNsIDs, function(item){
            return regex.test(item.label);
        });
        response(result);
    },
    select: ...

这适用于常规数组 - 例如,如果数组如下:

var LNsIDs = ['Jones', 'Roberts', 'Collins', etc]; 

BOTTOM LINE:如何在这些对的值上执行此正则表达式,以便我可以检索所选对的键?

2 个答案:

答案 0 :(得分:1)

确切地确定你想要的东西有点困难,但也许这会让你走上正轨。似乎主要的困难是LNsIDs数组中的对象没有一致的属性名称,因此您无法轻易引用它们。这是一个潜在的解决方案:

var LNsIDs = [
    {2053: 'Jones'},
    {9862: 'Roberts'},
    {1567: 'Collins'},
];

var regex = /^R/i;
var result = $.grep(LNsIDs, function(item) {
    // Pull out the name of the first property on our object
    var key = Object.keys(item)[0];

    // Use the key to lookup and test the value of that property
    if (regex.test(item[key])) {
        // We match, so add two new properties to the object
        // before returning true:
        //
        // 1. The property name (i.e. 2053)
        // 2. The value of that property (i.e. Jones)
        item.key = key;
        item.label = item[key];
        return true;
    }

    // We don't match so we don't bother setting additional
    // properties
    return false;
});

// Once we have our result, it will just be an array of matches
// and each of the objects in it will have a 'key' and a 'label'
// property we can look at:
for (var i = 0; i < result.length; i++) {
    alert('Found match with key ' + result[i].key + ' and label ' + result[i].label);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

我最终能够以“正确”的方式实现这一目标,也就是说,通过在选择中放置两个单独的AJAX调用自动完成功能的参数,并从我的数据源输出传统的JSON数组。显然,这一直是执行此操作的正确方法。谢谢!