Javascript 为什么循环后数组看起来是空的?
Javascript 为什么循环后数组看起来是空的?,javascript,arrays,loops,debugging,javascript-objects,Javascript,Arrays,Loops,Debugging,Javascript Objects,功能par(idF、idM){ this.IDOvna=idM; this.IDOvce=idF; } 功能育种(){ 设idOvce=[]; 设brOvce=[]; 设mesecOvce=[]; 让Godinaovice=[]; 设istorija1=[]; 设istorija2=[]; 设idOvna=[]; 设brOvna=[]; 让mesecOvna=[]; 让godinaOvna=[]; 设y=0; 设o=0; 让帕罗维=[]; 设c=0; 取回(“http://localhost/o
功能par(idF、idM){
this.IDOvna=idM;
this.IDOvce=idF;
}
功能育种(){
设idOvce=[];
设brOvce=[];
设mesecOvce=[];
让Godinaovice=[];
设istorija1=[];
设istorija2=[];
设idOvna=[];
设brOvna=[];
让mesecOvna=[];
让godinaOvna=[];
设y=0;
设o=0;
让帕罗维=[];
设c=0;
取回(“http://localhost/ovce/ovce.json")
.然后(功能(resp){
返回resp.json();
})
.then(功能(数据){
控制台日志(数据);
for(设i=0;i
羞怯的
育种
如何在提取中使用此问题
函数
如果在获取其完全正常值之外使用int,则数组将为空
编辑:
由于使用了post fetch方法,因此在填充数据时,需要将所有while循环放在最后一个,因为fetch是异步的=/
由于您有两个fetch,并且两个fetch都在填充数组的,因此需要在最后一个中执行第二个,然后在第一个fetch中执行第二个。最后,您可以在最后一个循环时执行,然后执行第二个获取的。
使用异步等待方法可能更清晰
function par(idF, idM) {
this.IDOvna = idM;
this.IDOvce = idF;
}
function breeding() {
let idOvce = [];
let brOvce = [];
let mesecOvce = [];
let godinaOvce = [];
let istorija1 = [];
let istorija2 = [];
let idOvna = [];
let brOvna = [];
let mesecOvna = [];
let godinaOvna = [];
let y = 0;
let o = 0;
let parovi = [];
let c = 0;
fetch("http://localhost/ovce/ovce.json")
.then(function(resp) {
return resp.json();
})
.then(function(data) {
console.log(data);
for (let i = 0; i < data.ovce.length; i++) {
idOvce[i] = data.ovce[i].id;
brOvce[i] = data.ovce[i].broj;
mesecOvce[i] = data.ovce[i].mesec;
godinaOvce[i] = data.ovce[i].godina;
istorija1[i] = data.ovce[i].istorija1;
istorija2[i] = data.ovce[i].istorija2;
}
fetch("http://localhost/ovce/ovnovi.json")
.then(function(resp1) {
return resp1.json();
})
.then(function(data1) {
console.log(data1);
for (let g = 0; g < data1.ovnovi.length; g++) {
idOvna[g] = data1.ovnovi[g].id;
brOvna[g] = data1.ovnovi[g].broj;
mesecOvna[g] = data1.ovnovi[g].mesec;
godinaOvna[g] = data1.ovnovi[g].godina;
while (o < idOvna.length) {
y = 0;
while (y < idOvce.length) {
if (istorija1[y] != 0) {
if ((istorija2[y] != idOvna[o]) && (istorija2[istorija1[y]] != idOvna[o])) {
parovi[c] = new par(idOvce[y], idOvna[o]);
c++;
}
} else {
parovi[c] = new par(idOvce[y], idOvna[o]);
c++;
}
y++;
}
o++;
}
console.log(parovi);
return parovi;
}
});
});
}
功能par(idF、idM){
this.IDOvna=idM;
this.IDOvce=idF;
}
功能育种(){
设idOvce=[];
设brOvce=[];
设mesecOvce=[];
让Godinaovice=[];
设istorija1=[];
设istorija2=[];
设idOvna=[];
设brOvna=[];
让mesecOvna=[];
让godinaOvna=[];
设y=0;
设o=0;
让帕罗维=[];
设c=0;
取回(“http://localhost/ovce/ovce.json")
.然后(功能(resp){
返回resp.json();
})
.then(功能(数据){
控制台日志(数据);
for(设i=0;i
处理数组的循环在fetch回调函数之外,因此它不会等待填充数组。看
您可以使函数异步
并使用等待
等待它们
还要注意,调用此函数的代码需要使用wait
或.then()
来获取返回的parovi
数组。看
异步函数繁殖(){
设idOvce=[];
设brOvce=[];
设mesecOvce=[];
让Godinaovice=[];
设istorija1=[];
设istorija2=[];
设idOvna=[];
设brOvna=[];
让mesecOvna=[];
让godinaOvna=[];
设y=0;
设o=0;
让帕罗维=[];
设c=0;
等待取回(“http://localhost/ovce/ovce.json")
.然后(功能(resp){
返回resp.json();
})
.then(功能(数据){
控制台日志(数据);
for(设i=0;i