У меня есть объект, который выглядит следующим образом:
var myObj = {
"account id": "123TRANS",
"account name": "Optimus Prime",
"creator id": "Prime",
"contact tel": 08915243209,
"house no": 209,
"is registered": true,
"price": 398.83,
"first name": "paul",
"last name": "jones",
"dob": "27-Jun-1978 00:00:00",
"previous orders": true,
"average price": 123.78,
"lace colour": "blue",
"first line": "Jupiter Close",
"city": "New York",
"alias": "Jupiter",
"role": "Accountant"
}
На моей HTML-странице есть поле <input>
, где пользователи могут вводить текст (требуется минимум 3 символа).Я должен был быть в состоянии отфильтровать весь объект выше по совпадениям для введенной строки.
Например, если string = "Prime" ответ:
{
"account name": "Optimus Prime",
"creator id": "Prime",
}
Например, string ="acc" ответ:
{
"account id": "123TRANS",
"account name": "Optimus Prime",
"role": "Accountant"
}
Например, string = "209" ответ:
{
"contact tel": 08915243209,
"house no": 209,
}
Я пытался использовать .reduce
, однако это дает смешанные результаты:
var myObject = {from above};
var filter = 'prime';
myObject = Object.keys(myObject).reduce((r, e) => {
// Avoid int/float/bool and check key + value
if(e !== 'contact tel' &&
e !== 'house no' &&
e !== 'previous orders') {
// Check Key or Value for filter
if(myObject[e].toLowerCase().includes(filter.toLowerCase) || e.toLowerCase().includes(filter.toLowerCase())) {
r[e] = myObject[e]
}
}
// Check int/float/bool and check key
if(e === 'contact tel' ||
e === 'house no' ||
e === 'previous orders') {
// Check Key or Value for filter
if(e.toLowerCase().includes(filter.toLowerCase())) {
r[e] = myObject[e]
}
}
return r;
}, {})
У меня тоже есть доступ к lodash, но я не смог найти ничего, что проверяет ключи И значения, только значение ИЛИ ключа.