在数组中搜索%LIKE%,如SQL

时间:2014-12-16 17:04:32

标签: javascript arrays

因为SQLite非常慢,所以我选择了所有需要的记录并存储在一个数组中。

现在在我的应用程序中,我有一个搜索部分,用户可以搜索此数组的部分字符串。

我的数组结构是:

[
   {
   name : 'Black',
   family : 'Dragon',
   email : 'black.dragon@blahblahblah.com'
   }
]

我的页面中有3个输入字段,用户可以输入一些字符,我应该搜索这个数组并返回匹配值的索引。

例如,如果我的用户输入blalack@blahblah,我的程序应返回此值的索引。

有可能吗?我该怎么办?

3 个答案:

答案 0 :(得分:1)

对于像这样的数组操作,

UnderscoreLoDash非常方便。

function getMatchingIndex(yourArray, searchTerm) {
  return _.findIndex(yourArray, function(obj) {
    return _.contains(obj, searchTerm);
  });
}

答案 1 :(得分:0)

如果您正在使用Angular,则可以通过使用过滤器来实现。有一个开箱即可做你想要的,甚至在官方教程中也提到过:

https://docs.angularjs.org/tutorial/step_03

如果您想过滤转发器中的数据,请执行以下操作:

Search: <input ng-model="query">
<ul>
  <li ng-repeat="dataItem in dataArray | filter:query">
    {{data.name}}
    <p>{{data.family}}</p>
    <p>{{data.email}}</p>
  </li>
 </ul>

答案 2 :(得分:0)

您可以使用Alasql JavaScript SQL库执行此操作。它比SQLite更快,但仍然可以在JavaScript数组上使用SQL。

var res = alasql('SELECT * FROM ? WHERE email LIKE ?',[data, enter]);

为了提高执行速度,您可以预编译SELECT语句(因此,Alasql不需要 花时间解析SQL语句。)

// Initialization
var mySelect = alasql.compile('SELECT * FROM ? WHERE email LIKE ?');

// Execution time
var res = mySelect([data, enter]);