var data = [
{
_id: '001',
name: 'Elon Musk',
rol: 'Chairman',
image: 'https://picsum.photos/200/101',
email: 'elon.musk@foo.com',
phone: '5544332211',
active: true,
exp: 30
},
{
_id: '002',
name: 'Carlos Hernandez',
rol: 'Chief Operation Officer',
image: 'https://picsum.photos/200/102',
email: 'carlos.hernandez@foo.com',
phone: '5544332211',
active: true,
exp: 15
},
{
_id: '003',
name: 'Alberto Siurob',
rol: 'Chief Information Officer',
image: 'https://picsum.photos/200/103',
email: 'alberto.siurob@foo.com',
phone: '5544332211',
active: false,
exp: 5
},
{
_id: '004',
name: 'Erick Lopez',
rol: 'Chief Marketing Officer',
image: 'https://picsum.photos/200/104',
email: 'erick.lopez@foo.com',
phone: '5544332211',
active: true,
exp: 1
},
];
function search( value ){
// Si no esta vacio
if( value ) {
const keys = ['name', 'email', 'rol'];
const match = searchKeys( data, keys, value.toLowerCase() );
console.log( match );
}
}
function searchKeys( source, keys, word ){
const arr = [];
// Recorrer llaves de busqueda
keys.forEach( ( k ) => {
// Recorrer la fuente
source.forEach( ( s ) => {
// validar si el indice tiene un valor semejante
if ( s[ k ].toLowerCase().includes( word ) ) {
// validar si ya existe en el arreglo
if ( arr.indexOf( s._id ) < 0 ) {
arr.push( s );
}
}
});
});
return arr;
}
<input type="text" onkeyup="search( this.value )">
Я делаю маленькая поисковая служба с прибылью Javascript. Правда состоит в том, что оно функционирует очень хорошо, но у меня есть, что проблема, которая, если я только помещаю букву в неудар в лунку, утраивает возвращенные результаты.
Что я буду вредить?
PD: Если у них есть какая-то подсказка делания этого лучшей формой, всегда она втречена с радостью
Pudes использовать .filter
, .some
и .test
, чтобы уменьшать cГіdigo. Идея serГ, - чтобы выдавать все элементы, в которых какое-то из свойств ('ямс', 'электронная почта', 'список') совпадает с нею bГєsqueda.
var data = [{"_id":"001","name":"Elon Musk","rol":"Chairman","image":"https://picsum.photos/200/101","email":"elon.musk@foo.com","phone":"5544332211","active":true,"exp":30},{"_id":"002","name":"Carlos Hernandez","rol":"Chief Operation Officer","image":"https://picsum.photos/200/102","email":"carlos.hernandez@foo.com","phone":"5544332211","active":true,"exp":15},{"_id":"003","name":"Alberto Siurob","rol":"Chief Information Officer","image":"https://picsum.photos/200/103","email":"alberto.siurob@foo.com","phone":"5544332211","active":false,"exp":5},{"_id":"004","name":"Erick Lopez","rol":"Chief Marketing Officer","image":"https://picsum.photos/200/104","email":"erick.lopez@foo.com","phone":"5544332211","active":true,"exp":1}];
function search(value) {
if (value) {
const keys = ['name', 'email', 'rol'];
return data.filter(e => keys.some(a => (new RegExp(value,"gi")).test(e[a])));
}
}
console.log(search("lop"));