JavaScript if语句未执行代码

时间:2019-10-22 14:45:20

标签: javascript jquery html ajax if-statement

我有一个非常简单的代码,用于检查数组中的项目是否包含在另一个数组中。如果是的话,我将一个选中的输入复选框推入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语句,而不是都不执行?这使德b'耶稣迷惑了我...

编辑:filiaisSelecionadas(用${filiais} EL填充)是具有一堆属性的对象的数组。返回的Json是相同对象的数组,但不包含与其他对象完全相同的对象。 json数组始终与filiaisSelecionadas相同或相同。

编辑2:根据用户Hongarc的请求,我在if and else中添加了console.log(),结果如下:

$.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>

,输出为 two lines of "The ELSE statement is executing!"

请注意,我的json数组的大小为4,为了进行测试,我将其放置为大小,因此它将容纳另一个数组中的2个对象,而另一个数组中没有2个。因此,预期的输出应该是“ IF语句正在执行!” x2和“ ELSE语句正在执行!” x2。

2 个答案:

答案 0 :(得分:-1)

您的循环是不可迭代的,因为json.length将返回未定义

“ Object.keys()”,然后尝试查找长度。

答案 1 :(得分:-1)

我认为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)上签出 除非您揭示更多的底层结构,否则我帮不了您,但是我相信您可以弄清楚。

希望有帮助。