Как правильно отсортировать свойства массива по вхождению (native js)?
Здравствуйте. Подскажите, пожалуйста, как правильно решить следующую задачу. У меня есть следующий массив.
let arr = [ { id: 1, firstName: 'John', lastName: 'Smith' }, { id: 2, firstName: 'Brady', lastName: 'Dennis' }, { id: 3, firstName: 'Sandoval', lastName: 'Pratt' }, { id: 4, firstName: 'Davis', lastName: 'Andrews' } ] Мне необходимо при вводе в: <input type="text"> например следующее значение: Код:
John Denn let arr = [ { id: 1, firstName: 'John', lastName: 'Smith' }, { id: 2, firstName: 'Brady', lastName: 'Dennis' } ] или например (без учета регистра) Код:
Pratt Sm let arr = [ { id: 3, firstName: 'Sandoval', lastName: 'Pratt' }, { id: 1, firstName: 'John', lastName: 'Smith' } ] Буду благодарен любой помощи. |
s24344,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> </head> <body> <ul class="list"></ul> <script> function fn(arr, pattern) { pattern = new RegExp("^(" + pattern.trim().replace(/\s+/g, "|") + ")", "i"); return arr.filter(function(el) { return Object.values(el).some(function(val) { return pattern.test(val) }) }) }; let arr = [ { id: 1, firstName: 'John', lastName: 'Smith' }, { id: 2, firstName: 'Brady', lastName: 'Dennis' }, { id: 3, firstName: 'Sandoval', lastName: 'Pratt' }, { id: 4, firstName: 'Davis', lastName: 'Andrews' } ] , pattern = 'Pratt Sm', arrFilter = fn(arr, pattern), html = arrFilter.reduce(function(html, el) { return html += '<li class="item" ><div>'+el.firstName+' '+ el.lastName+'</div></li>' },""); document.querySelector(".list").innerHTML = html; </script> </body> </html> |
Спасибо за помощь.
|
Рони, вы могли бы ещё подсказать, как защититься, чтобы не ломался код, вот от таких вхождений:
// let pattern = '*'; let pattern = '\'; |
s24344,
function escapeRegExp(string){ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function fn(arr, pattern) { pattern = escapeRegExp(pattern); pattern = new RegExp("^(" + pattern.trim().replace(/\s+/g, "|") + ")", "i"); return arr.filter(function(el) { return Object.values(el).some(function(val) { return pattern.test(val) }) }) }; |
s24344,
или формируйте RegExp сами и тогда let pattern = /^(Pratt|Sm)/i; function fn(arr, pattern) { return arr.filter(function(el) { return Object.values(el).some(function(val) { return pattern.test(val) }) }) }; |
Спасибо.
|
Часовой пояс GMT +3, время: 16:01. |