JavaScript, если оператор не выполняет код - PullRequest
0 голосов
/ 22 октября 2019

У меня есть довольно простой код, который проверяет, содержатся ли элементы в массиве в другом. Если это так, я вставляю в массив itens флажок ввода, проверенный на ввод, если нет, я помещаю обычный флажок без флажка в массив. Проверьте это:

$.ajax({
  url: '${pageContext.request.contextPath}/filial/select.json',
  method: 'GET'
}).done(function(json) {
  var itens=[];
  var filiaisSelecionadas = ${filiais};
  for (var i = 0; i < json.length; i++) {
    if(filiaisSelecionadas.includes(json[i])) {
	  itens.push('<input id= "idFilial'+json[i][0]+'" type = checkbox class=checkbox1 name = filiaisId value="'+json[i][0]+'" checked>' +json[i][1]+"-"+ json[i][2]  + '</input></br>');
	} else {
      itens.push('<input id= "idFilial'+json[i][0]+'" type = checkbox class=checkbox1 name = filiaisId value="'+json[i][0]+'">' +json[i][1]+"-"+ json[i][2]  + '</input></br>');
	}
  }
  $('#idFilial').html($("<tbody/>", {html:itens}));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Но по какой-то причине код внутри if(filiaisSelecionadas.includes(json[i])) просто не выполняется. Лечение работает просто отлично. Если элемент не находится в массиве, он устанавливает флажок без флажка. Однако, если элемент находится в массиве, он просто не выполняется? Я бы понял, если он всегда выполняет оператор else, но не выполняет ни ???? Это сбивает с толку de b'jesus из меня ...

Редактировать: filiaisSelecionadas (который заполняется ${filiais} EL) является массивом объекта, который имеет множество свойств. Возвращаемый Json представляет собой массив тех же объектов, но не содержит таких же точных объектов, как другие. Массив json всегда либо больше, либо имеет тот же размер, что и filiaisSelecionadas.

Редактировать 2: По запросу пользователя Hongarc я добавил console.log() в if и else, результат будет следующим:

$.ajax({
		url: '${pageContext.request.contextPath}/filial/select.json',
		method: 'GET'
	}).done(function(json) {
		var itens=[];
		var filiaisSelecionadas = ${filiais};
		for (var i = 0; i < json.length; i++) {
			if(filiaisSelecionadas.includes(json[i])){
				console.log("The IF statement is executing!");
				itens.push('<input id= "idFilial'+json[i][0]+'" type = checkbox class=checkbox1 name = filiaisId value="'+json[i][0]+'">' +json[i][1]+"-"+ json[i][2]  + '</input></br>');
			}
			else{
				console.log("The ELSE statement is executing!\"");
				itens.push('<input id= "idFilial'+json[i][0]+'" type = checkbox class=checkbox1 name = filiaisId value="'+json[i][0]+'">' +json[i][1]+"-"+ json[i][2]  + '</input></br>');
			}
		}
			$('#idFilial').html($("<tbody/>", {html:itens}));

		});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

с выводом две строки «Выражение ELSE выполняется!»

Имейте в виду, что мой массив jsonимеет размер 4 и для теста я сделал его таким образом, чтобы он содержал 2 объекта, которые находятся в другом массиве, и 2 - нет. Таким образом, ожидаемый результат должен был быть следующим: «Оператор IF выполняется!»x2 и "оператор ELSE выполняется!"x2.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Я думаю, что метод includes() проверяет, находится ли значение внутри массива, но если у вас есть массив внутри, он не вернет true. Это работает, только если вы храните ссылки на переменные.

, поэтому для

let var1 = [1, 2]
let values = [var1, [1,2], 'primitive']
values.includes('primitive') // true
values.includes(var1) // true
values.includes([1,2]) // false

Вам необходимо найти другой способ проверки, содержится ли он в массиве.

Вы можете использовать функции массива .filter() или .find(). Посмотрите их в Mdn docs (Array filter) Я не смогу вам помочь, если вы не раскроете больше базовой структуры, но я уверен, что вы можете понять это.

Надеюсь, это поможет.

0 голосов
/ 22 октября 2019

Ваш цикл не повторяется, потому что json.length вернет undefined

«Object.keys ()», а затем попытается найти длину.

...