我认为MDN article on Template Literals之前已经问过这个问题,但我似乎无法弄明白。我的cordova应用程序中有两个来自SQL数据库的数组。是否可以组合这两个数组,并通过与搜索查询的最佳匹配进行排序。
在我的应用程序中,我有一个搜索功能,可以通过最佳匹配搜索多个本地表和订单。这很好用
SQL查询示例:
val featureAssembler = new VectorAssembler().
setInputCols(featureArray).
setOutputCol("features")
重复此过程,并为要搜索的不同表创建不同的数组。
我留下了2个用户表和一个用于留言内容的表。在SQL查询运行回调函数之后,然后将所有结果排序为1个数组:
tx.executeSql("SELECT * FROM contacts WHERE f_name LIKE ? ORDER BY (CASE WHEN f_name = ? THEN 1 WHEN f_name LIKE ? THEN 2 ELSE 3 END), f_name ",["%" + query + "%", query, query + "%"],onSuccess, onError);
是否有一种方法可用于遍历数组 allResults 并重新排序此数组以匹配搜索查询。
数组输出类似于搜索' user':
var allResults = [];
// create an array of all
for(var x = 0; x < allChatSearchResults.users.length; x++){
var result = allChatSearchResults.users[x];
result['type'] = 'user';
allResults[allResults.length] = result;
}
for(var x = 0; x < allChatSearchResults.messages.length; x++){
var result = allChatSearchResults.messages[x];
result['type'] = 'message';
allResults[allResults.length] = result;
}
完整代码:
allResults = [
{
type : 'user',
f_name : 'username',
l_name : 'somename'
},
{
type : 'message',
message : 'this is my user name', ////// query from sql matches this
date : '11/04/2016'
},
{
type : 'message',
message : 'another containing username', ////// query from sql matches this
date : '09/04/2016'
},
//and so on
];
答案 0 :(得分:2)
由于您未在返回的SQL中包含相关性分数,因此无法组合两个数组。
首先,您需要将分数作为SQL的一部分返回:
tx.executeSql("SELECT *,(CASE WHEN f_name = ? THEN 1 WHEN f_name LIKE ? THEN 2 ELSE 3 END) as Score FROM contacts WHERE f_name LIKE ? ORDER BY (CASE WHEN f_name = ? THEN 1 WHEN f_name LIKE ? THEN 2 ELSE 3 END), f_name ",["%" + query + "%", query, query + "%"],onSuccess, onError);
然后,您将能够组合数组并按“分数”排序。柱:
allResults.sort(function(a,b){ return a.Score-b.Score; });