Как пройти через продукт JSON, как будто это ваша база данных? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть файл JSON, который выглядит следующим образом:

{
  "COMPONENTS_EXPORT_FILENAME" : "Components.xls",
  "CONTRACT_DETAILS_EXPORT_FILENAME" : "ContractDetails.xls",
  "CONTRACT_LIST_EXPORT_FILENAME" : "Contracts.xls",
  "EQUIPMENTS_EXPORT_FILENAME" : "EquipmentList.xls",
  "FILENAME_PDF_SERVICE_PERFORMANCE_REPORT" : "ServicePerformanceReport.pdf",
  "INVOICES_CONTRACT_LIST_EXPORT_FILENAME" : "ContractInvoices.xls",
  "INVOICES_LIST_EXPORT_FILENAME" : "ServiceInvoice.xls",
  "INVOICES_PSR_LIST_EXPORT_FILENAME" : "PSR_Invoices.xls",
  "MG_REQUEST_TYPE_OPTION_VALUES" : "PMReq:#Preventive Maintenance" 
  "OPTIONS_LIST_EXPORT_FILENAME" : "OptionsList.xls"
}

Я хочу создать панель поиска, где, если я наберу: xls

Она должна вернуть мне:

OPTIONS_LIST_EXPORT_FILENAME: OptionsList.xls
COMPONENTS_EXPORT_FILENAME : Components.xls
CONTRACT_DETAILS_EXPORT_FILENAME : ContractDetails.xls
CONTRACT_LIST_EXPORT_FILENAME : Contracts.xls
EQUIPMENTS_EXPORT_FILENAME" : EquipmentList.xls

и т. Д.

Я использую JSON.parse и JSON.stringify

, но мне нужно использовать определенное имя, например json_file.CONTRACT_LIST_EXPORT_FILENAME

, и это даетme contracts.xls

Пожалуйста, предложите обходной путь.

После комментариев от @nikhil я придумал этот код:

    var data = {
   "COMPONENTS_EXPORT_FILENAME" : "Components.xls",
   "CONTRACT_DETAILS_EXPORT_FILENAME" : "ContractDetails.xls",
   "CONTRACT_LIST_EXPORT_FILENAME" : "Contracts.xls",
   "EQUIPMENTS_EXPORT_FILENAME" : "EquipmentList.xls",
  "FILENAME_PDF_SERVICE_PERFORMANCE_REPORT" : 
  "ServicePerformanceReport.pdf",
 "INVOICES_CONTRACT_LIST_EXPORT_FILENAME" : "ContractInvoices.xls",
 "INVOICES_LIST_EXPORT_FILENAME" : "ServiceInvoice.xls",
 "INVOICES_PSR_LIST_EXPORT_FILENAME" : "PSR_Invoices.xls",
 "MG_REQUEST_TYPE_OPTION_VALUES" : "PMReq:#Preventive Maintenance",
 "OPTIONS_LIST_EXPORT_FILENAME" : "OptionsList.xls"
 };


function getTextInput() {
        var e = document.getElementById("myText").value;
        document.getElementById("txt").innerHTML = e;
        return e;
        }

function search(data, searchKey) {
var results = [];

Object.entries(data).forEach(([key, value]) => {
  if (key.toLowerCase().includes(searchKey.toLowerCase()) ||
  value.toLowerCase().includes(searchKey.toLowerCase())) {
  results.push({
    [key]: [value]
  });
 }
});

 for(var i in results)
{
  document.write(i + "=" + results[i] + '<br>');
}


}
   search(data,getTextInput);

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете использовать Object.entries () и Array.filter () , чтобы возвращать только записи, содержащие данную строку поиска.

var data = {
  "COMPONENTS_EXPORT_FILENAME" : "Components.xls",
  "CONTRACT_DETAILS_EXPORT_FILENAME" : "ContractDetails.xls",
  "CONTRACT_LIST_EXPORT_FILENAME" : "Contracts.xls",
  "EQUIPMENTS_EXPORT_FILENAME" : "EquipmentList.xls",
  "FILENAME_PDF_SERVICE_PERFORMANCE_REPORT" : "ServicePerformanceReport.pdf",
  "INVOICES_CONTRACT_LIST_EXPORT_FILENAME" : "ContractInvoices.xls",
  "INVOICES_LIST_EXPORT_FILENAME" : "ServiceInvoice.xls",
  "INVOICES_PSR_LIST_EXPORT_FILENAME" : "PSR_Invoices.xls",
  "MG_REQUEST_TYPE_OPTION_VALUES" : "PMReq:#Preventive Maintenance",
  "OPTIONS_LIST_EXPORT_FILENAME" : "OptionsList.xls"
};


function search(data, searchKey) {
  return Object.entries(data).filter(([key, value]) => {
    return key.toLowerCase().includes(searchKey.toLowerCase()) ||
      value.toLowerCase().includes(searchKey.toLowerCase());
  });
}

console.log(search(data, ".xls"));
...