Автозаполнение в обычном JS из данных obj

Я пытаюсь создать поле ввода поиска «автозаполнение» в ванильном javascript (без jquery или jquery-ui). Я бы хотел, чтобы «автозаполнение» извлекало из моего объекта javascript данные для «предложений». Я пытаюсь сделать следующее: безрезультатно (без ошибок, просто без ответа). Функциональность должна быть суженной «совпадением»; т.е. я начинаю набирать «сначала будут рекомендованы результаты» и т. д.

HTML.

<div class = "row">
    <input type = "text" id = "autoSuggest" placeholder = "Search..." onkeyup = "changeInput(this.value)">
    <div id = "result"></div>
</div>

Попытка JavaScript для этой функции:

function matchIt(input) {
  var reg = new RegExp(input.split('').join('\\w*').replace(/\W/, ""), 'i');
  return json.filter(function(file) {
    if (file.match(reg)) {
      return file;
    }
  });
}

function changeInput(val) {
  var autoCompleteResult = matchIt(val);
  document.getElementById("result").innerHTML = autoCompleteResult;
}

Данные JS obj:

var json =[{
            "Name": "zips",
            "Type": "Directory",
            "DateModified": "6/14/2018 17:22:50",
            "Size": "5 KB",
        }, {
            "Name": "presets",
            "Type": "Directory",
            "DateModified": "5/11/2018 7:32:10",
            "Size": "2 KB",
        }, {
            "Name": "workflow",
            "Type": "Directory",
            "DateModified": "6/26/2018 10:29:59",
            "Size": "6 KB",
        },{
            "Name": "software",
            "Type": "Directory",
            "DateModified": "3/16/2018 10:29:59",
            "Size": "16 KB",
        },{
            "Name": "mmm_data",
            "Type": "Directory",
            "DateModified": "6/27/2018 1:19:29",
            "Size": "3 KB",
        },{
            "Name": "jobs",
            "Type": "Directory",
            "DateModified": "4/27/2018 11:59:59",
            "Size": "3 KB",
        },
];

может дать это посмотреть: dev.to/stephenafamo/…

lltt 27.06.2018 20:48

Существует так много чистых библиотек автозаполнения JS. Почему вы пишете это из утиля?

bigless 27.06.2018 20:48

или проверьте хорошее автозаполнение: goodies.pixabay.com/javascript/auto-complete/demo.html

lltt 27.06.2018 20:49

@ Organism.exe спасибо, я прочитал это; но он использует источник данных php

fred randall 27.06.2018 20:51

@ No-Spex, как говорится, вы можете использовать источник данных в формате JSON

lltt 27.06.2018 20:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
823
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подбирать нужно на file.Name, а не на file. Затем функция обратного вызова фильтра должна возвращать значение true/false, а не объект.

var json = [{
  "Name": "zips",
  "Type": "Directory",
  "DateModified": "6/14/2018 17:22:50",
  "Size": "5 KB",
}, {
  "Name": "presets",
  "Type": "Directory",
  "DateModified": "5/11/2018 7:32:10",
  "Size": "2 KB",
}, {
  "Name": "workflow",
  "Type": "Directory",
  "DateModified": "6/26/2018 10:29:59",
  "Size": "6 KB",
}, {
  "Name": "software",
  "Type": "Directory",
  "DateModified": "3/16/2018 10:29:59",
  "Size": "16 KB",
}, {
  "Name": "mmm_data",
  "Type": "Directory",
  "DateModified": "6/27/2018 1:19:29",
  "Size": "3 KB",
}, {
  "Name": "jobs",
  "Type": "Directory",
  "DateModified": "4/27/2018 11:59:59",
  "Size": "3 KB",
}, ];




function matchIt(input) {
  var reg = new RegExp(input.split('').join('\\w*').replace(/\W/, ""), 'i');
  return json.filter(file => !!file.Name.match(reg));
}

function changeInput(val) {
  if (val.length == 0) return;
  var autoCompleteResult = matchIt(val);
  document.getElementById("result").innerHTML = autoCompleteResult.map(i => i.Name).join('<br>')
}
<div class = "row">
  <input type = "text" id = "autoSuggest" placeholder = "Search..." onkeyup = "changeInput(this.value)">
  <div id = "result"></div>
</div>

Другие вопросы по теме