Как определить, существует ли запись с определенным значением в массиве из вызова MSSQL api с использованием javascript

#javascript #jquery #arrays #api

#javascript #jquery #массивы #API

Вопрос:

прошу прощения, если это безумно просто или на него уже отвечали миллион раз. Кажется, я просто не могу разобраться в других темах вопросов и ответов, которые я читал.

Я пытаюсь выяснить, как определить, имеет ли массив определенное значение в одном из его полей во всех строках. Другими словами, я просто хочу, чтобы он спросил, есть ли «preQualTypeID» 1 в любой из строк, и если нет, я получаю его, чтобы скрыть часть модального.

вот HTML-код для модального:

 <div class="modal fade hide" id="preQualModal" tabindex="-1" role="dialog" aria-labelledby="preQualsModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h3 class="modal-title" id="preQualsModalLabel">
                    <i class="fas fa-graduation-cap"></i>
                    <span>Prerequisite Qualifications</span>
                </h3>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">amp;times;</span>
                </button>
            </div>
            <div class="modal-body">
                <div class="col-12">
                    <div class="d-none" id="preQual_AccedemicDetails">
                        <div class="row pt-1 pb-3">
                            <div id="preQual_Academic">@*API data goes here*@</div>
                        </div>
                    </div>
                    <div class="d-none" id="preQual_AccessDetails">
                        <div class="row pt-1 pb-3">
                            <div id="preQual_Access">@*API data goes here*@</div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>
  

И вот Javascript, который я пытаюсь реализовать:

 $(function () {
    $('#preQualModal').modal({
        keyboard: true,
        backdrop: "static",
        show: false
        
    }).on('show.bs.modal', function () {
        var url = "/api/PreQualViewData/";
        var qualId = $(event.target).closest('td').data('id');

        $.get(url   qualId, function (data) {
        
            var accedemicExist = data.some(function (data) { data.preQualTypeID === 1 });
            
            if (accedemicExist == true) {
                $('#preQual_AccedemicDetails').removeClass('d-none');
            };
            
        });
    });
});
  

Главное, что я не могу заставить работать, это этот бит:

 var accExist = data.some(function (data) { data.preQualTypeID === 1 });
  

Это всегда приводит к «False», и я предполагаю, что это проблема с моим sytax. Когда я отлаживаю, он говорит, что «data.preQualTypeID» не определен, поэтому я предполагаю, что я сделал это неправильно, но я не знаю, с чего начать. Я не разбираюсь в Javascript и нахожу этот язык немного запутанным.

API создается контроллером ASP и выглядит следующим образом (я убрал некоторые детали, чтобы его было легче читать):

 [{"qualification":"Graduate Management Training Scheme","level":7,"preQualTypeID":2},
{"qualification":"Degree","level":6,"preQualTypeID":1},
{"qualification":"A Levels","level":3,"preQualTypeID":1},
{"qualification":"GCSEs","level":2,"preQualTypeID":1}]
  

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен. Обновит реализацию и проголосует за те, которые помогут.

Спасибо

Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

Ответ №1:

Вы можете использовать filter , чтобы проверить, есть данные, полученные из серверной части в ajax, preQualTypeID = 1 или нет в зависимости от этого removeClass .

Демонстрационный код :

 var data = [{
    "qualification": "Graduate Management Training Scheme",
    "level": 7,
    "preQualTypeID": 2
  },
  {
    "qualification": "Degree",
    "level": 6,
    "preQualTypeID": 1
  },
  {
    "qualification": "A Levels",
    "level": 3,
    "preQualTypeID": 1
  },
  {
    "qualification": "GCSEs",
    "level": 2,
    "preQualTypeID": 1
  }
];
//filter json aray 
var accedemicExist = $(data)
  .filter(function(i, n) {
    return n.preQualTypeID === 1; //check if prequaltypeid=1
  });
//if length > 0 exist 
if (accedemicExist.length > 0) {
  console.log("it exist do something")
  //do something
} else {

  console.log("not there sorry")
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  

Комментарии:

1. Спасибо вам, это сработало отлично. Я обновлю свой вопрос, чтобы показать, как я его внедрил.