Учитывая этот массив учетных записей (образец массива, который содержит более 500 000 записей)
{
"Accounts": {
"Account": [
{
"AccountNo":"12345",
"Status":"Active",
"Type":"Supplier",
"Account":"Big tile company",
"PermissionForSales":"Granted",
"Orders":{
"OrderDetail":[{
"Date":"2018-09-05",
"OrderID":"Abc121"
},
{
"Date":"2018-04-09",
"OrderID":"Nmp9812"
}]
}
},
{
"AccountNo":"98765",
"Status":"Inactive",
"Type":"Supplier",
"Account":"Boxes Inc",
"PermissionForSales":"Granted",
"Orders":{
"OrderDetail":[{
"Date":"2018-10-11",
"OrderID":"Yrt172"
},
{
"Date":"2018-04-01",
"OrderID":"Hwr121"
}]
}
}
]}}
Пользователь может запрашивать следующие поля в любой комбинации: AccountNo, Status, Account и OrderID
Теперь я вполне могу отфильтровать по одному полю на верхнем уровне:
var result = _.filter(accounts, function (a) {
return (a.Account.toLowerCase().indexOf((query).toLowerCase()) !== -1)
});
Так что если кто-то ищет "Большой", я получу новый массив только с первой записьюпример, поскольку учетная запись содержит слово «большой»
Однако, как я могу изменить этот фильтр, чтобы включить другие поля (без учета регистра), и вернуть новый массив всех соответствующих учетных записей, где любая комбинация результатовбыли найдены.
Например:
- Если бы кто-то искал OrderID "121", я бы ожидал, что обе записи вернутся
- Если кто-то будет искать аккаунт "Большой"Я бы ожидал, что первая запись вернется
- Если бы кто-то должен был искать "Ящик" для учетной записи, я бы ожидал, что вторая запись вернется
- Если бы кто-то должен был искать для учетной записи "B" и OrderID«444» Я бы ожидал, что оба вернутся назад, поскольку B находится в поле «Учетная запись».
Кроме того, просто для усложнения могут быть случаи, когда ордеров не существует.