Как найти объекты, когда вы вводите только часть номера телефона или имя, которое это имя (может быть прописными, строчными) => все еще дает результат? - PullRequest
0 голосов
/ 09 апреля 2020
 let obj = [
    {
        name: 'jame',
        phone: 123456
    },
    {
        name: 'alex',
        phone: 456789
    }
]  

Я создаю контакт менеджера приложений, включая функции.

  1. Входной контакт
  2. Удаление контакта
  3. Изменить контакт
  4. Найти контакт
  5. Сохранить и выйти
    помогите мне часть 4

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Вы можете использовать filter метод массива с методом String includes.

let obj = [
    {
        name: 'jame',
        phone: 123456
    },
    {
        name: 'alex',
        phone: 456789
    }
]
function searchcontact(obj, query) {
    let searchTerm = String(query).toLocaleLowerCase();
    let result = obj.filter( item =>{
        if(item.name.toLocaleLowerCase().includes(searchTerm) || item.phone.toString().includes(searchTerm)) {
            return  item;
        }
    });
    return result;
}
console.log(searchcontact(obj, "jame"));
console.log(searchcontact(obj, "456"));
console.log(searchcontact(obj, "alex"));
0 голосов
/ 09 апреля 2020

Если я не ошибаюсь, вы можете искать данные с телефона или электронной почты в объекте в верхнем или нижнем регистре.

Если это так, попробуйте следующую функцию вызова кода при нажатии клавиши или любое другое событие, которое вам нравится:

obj = [
{
  name : 'jame',
  phone : 123456
},
{
name : 'alex',
phone : 456789
}
]


var updateSearch = search => {

var  newObj = obj.filter(function (item) {
  let itemData = item.name ? item.name.toLowerCase() : ''.toLowerCase();
  let textData = search.toLowerCase();
  return itemData.indexOf(textData) > -1;

});


console.log(newObj);

};
0 голосов
/ 09 апреля 2020

Вам нужно перебрать массив (или использовать find или findIndex) и проверить ключ телефона.

Поиск с помощью String.prototype.includes ()

Вам нужно преобразовать строку поиска и значение ключа в нижний / верхний регистр, чтобы сделать поиск без учета регистра.

Пример кода будет выглядеть следующим образом. (Обратите внимание, что это возвращает первое совпадение, если вам нужен фильтр полного списка, см. Другие ответы.)

let obj = [{
    name: 'jame',
    phone: 123456
  },
  {
    name: 'alex',
    phone: 456789
  }
];

function Search(arr, searchString, searchKey) {

  return arr.find((item) => String(item[searchKey]).toLowerCase().includes(searchString.toLowerCase()));

}

console.log(Search(obj, 'Lex', 'name'));

console.log(Search(obj, 'me', 'name'));

console.log(Search(obj, '89', 'phone'));
...