Javascript 与此筛选函数相比是否有任何错误,因为它根本不返回任何内容
我正在尝试筛选fullcalendar上的一些事件,但我无法获得想要的适当对象。我正在使用函数过滤器,如下代码所示: 我尝试先使用===然后使用==因为我希望值相同。我甚至尝试使用&&来验证是否应该使用单个字符串而不是数组Javascript 与此筛选函数相比是否有任何错误,因为它根本不返回任何内容,javascript,jquery,arrays,filter,Javascript,Jquery,Arrays,Filter,我正在尝试筛选fullcalendar上的一些事件,但我无法获得想要的适当对象。我正在使用函数过滤器,如下代码所示: 我尝试先使用===然后使用==因为我希望值相同。我甚至尝试使用&&来验证是否应该使用单个字符串而不是数组 document.addEventListener('DOMContentLoaded', function () { $.ajax({ type: 'GET', url: "connection with A
document.addEventListener('DOMContentLoaded', function () {
$.ajax({
type: 'GET',
url: "connection with API",
success: function (doc) {
listData = doc;
console.log("done");
$(doc).each(function (idata) {
var dt = new Date(doc[idata].EDA);
dt.setHours(dt.getHours() + 1);
var dt2 = new Date(doc[idata].EDA);
dt2.setMinutes(dt2.getMinutes() + 30);
var dt3 = new Date(doc[idata].EDA);
dt3.setMinutes(dt3.getMinutes() + 30);
if (doc[idata].REFERENCE_NUMBER.split("/")[1] == "R9" && doc[idata].CARRIER_CODE_FOR_DISPLAY == "SESE") {
allEvents.push({
id: 1,
resourceId: '2',
title: doc[idata].CARRIER_CODE_FOR_DISPLAY + " - " + doc[idata].TRAILER_ID.split("/")[1],
start: doc[idata].EDA,
end: dt,
allday: false,
backgroundColor: '#041E42',
textColor: '#FAFAFA',
});
}
if (doc[idata].REFERENCE_NUMBER.split("/")[1] == "B" && doc[idata].CARRIER_CODE_FOR_DISPLAY == "SESE") {
allEvents.push({
id: 2,
resourceIds: ['1','3', '4'],
title: doc[idata].CARRIER_CODE_FOR_DISPLAY + " - " + doc[idata].TRAILER_ID.split("/")[1],
start: doc[idata].EDA,
end: dt3,
allday: false,
backgroundColor: '#041E42',
textColor: '#FAFAFA',
});
}
if (doc[idata].REFERENCE_NUMBER.split("/")[1] == "C" && doc[idata].CARRIER_CODE_FOR_DISPLAY == "SESE") {
allEvents.push({
id: 2,
resourceIds: ['3','4'],
title: doc[idata].CARRIER_CODE_FOR_DISPLAY + " - " + doc[idata].TRAILER_ID.split("/")[1],
start: doc[idata].EDA,
end: dt2,
allday: false,
backgroundColor: '#041E42',
textColor: '#FAFAFA',
});
}
if (doc[idata].REFERENCE_NUMBER.split("/")[1] == "R4" && doc[idata].CARRIER_CODE_FOR_DISPLAY== "SESE") {
allEvents.push({
id: 2,
resourceId: '1',
title: doc[idata].CARRIER_CODE_FOR_DISPLAY + " - " + doc[idata].TRAILER_ID.split("/")[1],
start: doc[idata].EDA,
end: dt,
allday: false,
backgroundColor: '#041E42',
textColor: '#FAFAFA',
});
}
if (doc[idata].REFERENCE_NUMBER.split("/")[1] == "KD") {
allEvents.push({
id: 3,
resourceId: '6',
title: doc[idata].CARRIER_CODE_FOR_DISPLAY,
start: doc[idata].EDA,
end: dt,
allday: false,
backgroundColor: '#94A596',
textColor: '#FAFAFA',
height: ''
});
}
});
let eventus3 = allEvents.filter((evento) => {
return evento.resourceIds == ['3','4'];
})
数组是做数据的指针,当你做像['1',2']=['1',2']这样的事情时,你在比较内存中两个不同的指针,因此你会得到false,即使内容是相同的。如果要比较两个数组,应循环遍历它们,查看每个元素是否等于另一个数组中的元素
希望这能有所帮助。您不能这样比较阵列:
evento.resourceIds == ['3', '4'];
所包含的对象数组通过引用进行比较,即,仅当它们指向同一对象时,==或===才返回true。请注意,[1,2]=[1,2]为false
模拟数组的==的一种方法是比较它们的JSON表示,因此在本例中
JSON.stringify(evento.resourceIds) === JSON.stringify(['3', '4']);
不确定它是否是最好的,但可能是最简洁的。我想要带有ResourceId的事件,但数组筛选器返回的我总是空的,无论它是或的副本