我有一个非常简单的代码,用于检查数组中的项目是否包含在另一个数组中。如果是的话,我将一个选中的输入复选框推入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。
答案 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)上签出
除非您揭示更多的底层结构,否则我帮不了您,但是我相信您可以弄清楚。
希望有帮助。