javascript - 为什么控制台显示所有元素,但长度为 0
问题描述
在我的代码中,我使用 AJAX 来填充一个数组,这很好用,但是当我在它给出 0 之外使用长度时。
看看这段代码,评论会告诉你我的意思。
$.ajax({
url: "url",
type : "GET",
//contentType: "application/json",
//dataType: "json",
data : { firstDate : "date1",
secondDate : "date2"}
//student_name : $('#id_student_name').val()
}).then(function(data) {
var obj = JSON.parse(data);
obj.results.forEach(element => {
console.log(element.DATEEND);
res.push(element);
dates.push(element.DATESTART);
});
});
var days = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'];
var i;
function min_date(all_dates) {
var min_dt = all_dates[0],
min_dtObj = new Date(all_dates[0]);
all_dates.forEach(function(dt, index){
if ( new Date( dt ) < min_dtObj)
{
min_dt = dt;
min_dtObj = new Date(dt);
}
});
return min_dt;
}
var d = [];
console.log(res.length + " "); // this give 0
for (var a = 0; a < res.length; a++) {
d[a] = res[a].DATESTART;
console.log(res[a].DATESTART);
}
console.log(d);//this is vide
console.log(res); //this give all element
.
.
.
解决方案
如果您将无原始元素记录到控制台,则将存储其引用以进行记录。因此,控制台中显示的内容可能会反映对象的较晚状态,然后是您进行日志记录时的状态。
在没有任何异步代码的情况下,这个小提琴将具有相同的行为:
var a = []
console.dir(a.length)
console.dir(a) // the array a does not have any elements a the time
// you do the logging but the console will show an
// array with 10 elements
for (var i = 0; i < 10; i++) {
a.push(1)
}
您甚至可以将其扩展到这样的示例:
var a = []
console.dir(a.length)
console.dir(a)
for (var i = 0; i < 4; i++) {
a.push(1)
}
console.dir(a)
for (var i = 0; i < 4; i++) {
a.push(2)
}
两个日志都将显示元素的最新状态,而不是记录它的状态。因此,如果您想查看元素所包含的实际值,您需要在日志记录之后立即添加断点或debugger
语句。或者您需要将对象转换为字符串。
推荐阅读
- vb6 - 获得编译错误:VB6 中未定义子或函数错误
- logging - 如何在 ubuntu 18.04 中管理 /var/log/journal/ 中的文件?
- php - 如何在 WordPress 中将复杂的 JSON 格式转换为可读格式?
- reactjs - 在单击按钮时反应延迟加载动态导入加载组件
- c# - C# WCF gzip 压缩 IIS 无法使 svc/gzip 工作(使用 CloudFlare)
- python - 为什么在使用scrapy的时候会出现这个参数错误?
- intellij-idea - 在没有jar文件的git中依赖包
- sql - 如何在 isql 中连接和查询两个数据库服务器?
- ios - 在 IOS 上的 PWA 中与 navigator.share 共享文件
- r - 错误:所需的迭代次数 = 1087633109 超过 iterMax = 1e+06 ;增加 iterMax, dx, dt 或减少 sigma