假设您有一组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:如何在这些对的值上执行此正则表达式,以便我可以检索所选对的键?
答案 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数组。显然,这一直是执行此操作的正确方法。谢谢!