#javascript #json #for-loop
#javascript #json #for-loop
Вопрос:
У меня настроен сервер узла, который выполняет запрос api и получает некоторые данные json. Я пытаюсь извлечь некоторые из этих данных в массив, и, похоже, это работает, когда я отправляю результат на консоль, но затем программа останавливается и выдает мне ошибку. Вот мой код.
request(options, function (error, response, body) {
if (error) throw new Error(error);
var myArray = [];
bodies = JSON.parse(body);
let tag = '';
let bond = '';
let members = '';
for(var i = 0; i <= bodies.memberCount; i ){
let bond = bodies.members[i];
let smoke = bond.tag;
if(smoke === "undefined"){
return;
}else{
console.log(smoke);
}
}
});
the output in the console is this-
YYVPJ0G
2PJP89J2Q
9G8Y8022
JC90J0R
9LLYVQVQ
QV2R90V
JC9JVV
20RLC0QY
28LP0P8CG
2QYLGG9GY
2JRQQYQQJ
9YJVV0GJ
2RVP8U9
9VYG0VGQ
C2PGPYC
8CJ9CGG2
YGV0CRL
2VUV22VQY
R8G82YG
PPJUYQJ
28VYV2QJG
YC9LR0G9
8088RCYG
2JUJR2QVY
2YRPUC2Q
GJ0QP90
UGU9LR8
GJQRVC8C
UVVVJ80Q
LURGY8JV
2C9UJRP82
20J9VYVC0
82GUQLYRL
L2PCUYP
2CQUYPJRU
PYU98GU9
9QR2CCCLV
PP9V2P0
CGYLUG
8QLPJRYC2
Y2GYCLU
LQJ0QQ8
P2Y08LLP
P0RUVLG82
/home/phil/ClashApp/requests.js:34
let smoke = bond.tag;
^
TypeError: Cannot read property 'tag' of undefined
at Request._callback (/home/phil/ClashApp/requests.js:34:18)
at Request.self.callback (/usr/lib/nodejs/request/index.js:148:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/usr/lib/nodejs/request/index.js:896:14)
at emitOne (events.js:121:20)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous>
(/usr/lib/nodejs/request/index.js:847:12)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
это дает все результаты, которые я хочу, но останавливает программу, прежде чем я смогу отправить их все в myArray….
Комментарии:
1. Вероятно, должно быть
i < bodies.memberCount
вместо<=
Ответ №1:
«bond» не содержит ключа «tag» для определенного индекса bodies.members[index].
добавьте проверку примерно так.
if(bond.tag !== undefined)
smoke = bond.tag
Ответ №2:
Поскольку нумерация массивов начинается с нуля, а длина — это количество элементов в массиве, поэтому последний индекс — это не длина массива, а длина — 1.
Поэтому вам нужно заменить i <= bodies.memberCount
на i < bodies.memberCount
request(options, function (error, response, body) {
if (error) throw new Error(error);
var myArray = [];
bodies = JSON.parse(body);
let tag = '';
let bond = '';
let members = '';
for(var i = 0; i < bodies.memberCount; i ){
let bond = bodies.members[i];
let smoke = bond.tag;
if(smoke === "undefined"){
return;
}else{
console.log(smoke);
}
}
});
Комментарии:
1. Это почти наверняка правильный ответ, но полезно включить четкое объяснение того, что вы изменили и почему (не только в комментарии к коду).
2. @pointy также я не вижу никакого смысла отвечать на опечатки снова и снова…
3. @JonasWilms ну, я, конечно, согласен с этим, но ответ есть ответ, и его вполне можно было бы сделать правильно.
4. Всем привет. Все, что я в итоге изменил, это то, что предложил Никита Умнов, i < bodies.memberCount , вместо i <= bodies.memberCount. Также удалены переменные: tag, bond и members. Я добавил их только по мере того, как пытался выяснить, что я сделал не так, потому что переменные продолжали возвращаться неопределенными. Я действительно ценю всю помощь! Первый раз публикую здесь!