#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. Спасибо вам, это сработало отлично. Я обновлю свой вопрос, чтобы показать, как я его внедрил.