我有一个测试数组: test = null;
我已经创建了一个函数,并且正在将值重新分配给测试数组,尽管它表示空数组/未定义数组
abcd(){
this.dataService.getAirport().subscribe(
(data) => {
this.airportData = data.data.data.metaDataRows;
this.countryData = data.data.data.metaDataFields[0].column;
const airConNames = this.countryData.values;
this.test = [];
this.test.push({name:'Select a Country', id:'0'});
//this.test = [{name:'Select a Country', id:'0'}];
console.log(this.test);
airConNames.forEach(function(entry) {
//console.log(entry.name);
//console.log(entry.country_id);
this.test = [{name : entry.name, id : entry.country_id}];
});
console.log(this.test); // this is null
},
(error) => {
this.dataService.handleServiceError(error.message, this.TAG);
}
);
console.log(this.test); //this is null
}
控制台显示空值,
我要去哪里错了
答案 0 :(得分:0)
有两件事,在foreach
循环内,您每次都将this.test
设置为一个新数组。您应该执行this.test.push()
操作或使用rest参数this.test = [{ ... }, ...this.test];
(取决于您是否想将其余部分放在末尾(不移位)或放在开头(推动)。
接下来,this
上下文不是您所期望的,因为您正在使用airConNames.forEach(function(entry) { ... })
。尝试使用箭头函数语法airConNames.forEach((entry) => {
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
箭头函数表达式的语法比函数表达式短,并且没有自己的this,arguments,super或new.target。
不知道为什么this.test
在foreach之后为null,这很奇怪。
试试:
this.test = airConNames.map(entry => ({ name: entry.name, id: entry.country_id }));
this.test.unshift({ name: 'Select a Country', id:'0' });
答案 1 :(得分:0)
airConNames.forEach(function(entry) {
//console.log(entry.name);
//console.log(entry.country_id);
// push new values into your test array:
this.test.push({name : entry.name, id : entry.country_id});
});
console.log(this.test); // this is null
},
for循环中的此上下文引用了forEach函数范围,这就是this.test与打印console.log的循环外的this.test不同的原因。
如果要确保它与上面声明的变量的实例相同,请使用粗箭头符号=>。 箭头函数表达式的语法比函数表达式短,并且没有自己的this,arguments,super或new.target。这些函数表达式最适合于非方法函数,因此不能用作构造函数。 例如:
airConNames.forEach((entry) => {
//console.log(entry.name);
//console.log(entry.country_id);
// push new values into your test array:
this.test.push({name : entry.name, id : entry.country_id});
});
在此处查看有关箭头功能的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions