Я перебираю вложенный объект, чтобы получить некоторые данные. Это работает, но я не могу вернуть данные и использовать их в другом месте.
Я попытался поместить цикл в обещание и тоже ничего не смог получить. Что я делаю неправильно?
data: any = {
'1234': {
url: 'https://example1.com/',
path: 'uploads',
link: 'https://example1.com/uploads',
},
'5678': {
url: 'https://example2.com/',
path: 'uploads',
link: 'https://example2.com/uploads',
}
}
onSubmit(formData) {
this.formdata = formData;
Object.keys(this.data).forEach(key => {
if (key == this.formdata.pin) {
const url = this.data[key].url;
// have also tried this.url to no avail
}
});
// says undefined
console.info(url);
// set up headers, etc...
// I need to use here
this.http.post(url, body, head)
...
}
url
не определено в приведенном выше примере, поскольку его объем ограничен.
onSubmit(formData) {
this.formdata = formData;
let url; // Define here so that its accessible
Object.keys(this.data).forEach(key => {
if (key === this.formdata.pin) {
url = this.data[key].url;
// have also tried this.url to no avail
}
});
// Now url is in scope
console.info(url);
...
}
Это решение перемещает url
в область блока onSubmit
и, следовательно, может быть использовано/доступно в вашем выражении console.info
.
Переключение вашего forEach
на map
может упростить это; map
возвращает значения, а forEach
нет.
Старый:
Object.keys(this.data).forEach(key => {
if (key == this.formdata.pin) {
const url = this.data[key].url;
}
});
// says undefined
console.info(url);
Новое: (я также добавил сюда ===
на основании комментария ниже)
const urls = Object.keys(this.data).map(key => {
if (key === this.formdata.pin) {
return this.data[key].url;
// have also tried this.url to no avail
}
});
console.info(urls);
документы карты и forEach документы
Лучше использовать ===
, чем ==
используйте карту() вместо forEach()