Need some help with this, been stuck for hours. Trying to iterate through an array of objects in node to grab one of the key's value and perform a regex function. I keep getting undefined reading errors, the latest one is "Cannot read properties of undefined (reading 'split')"
The array is created by calling toArray() on a MongoDB collection find function:
"ups": [
{
"_id": "61b5ef3a8bec102408f5289e",
"article_code": "4325832",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
},
{
"_id": "61b5ef3a8bec102408f528b4",
"article_code": "6242665",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
},
{
"_id": "61b5ef3a8bec102408f528ef",
"article_code": "3610890",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
}
]
Here's my code attempt:
for(let i = 0; i < ups.length; i ){
var ups_tt = i['tt_url'];
var unique_id = i['unique_id'];
var spl = ups_tt.split(/tracknum=(.*)/)[1];
ups_tt = spl.split("&")[0];
Any help would be appreciated, thank you.
CodePudding user response:
so, in your example, i
is just a number, so if you try to get a key of a number, then you will get undefined
> let i = 1;
undefined
> i["test"]
undefined
what you should do is reference the array ups
with the index:
for(let i = 0; i < ups.length; i ){
var ups_tt = ups[i].tt_url;
var unique_id = ups[i].unique_id;
var spl = ups_tt.split(/tracknum=(.*)/)[1];
ups_tt = spl.split("&")[0];
CodePudding user response:
Try this way
let y = {
"ups": [
{
"_id": "61b5ef3a8bec102408f5289e",
"article_code": "4325832",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
},
{
"_id": "61b5ef3a8bec102408f528b4",
"article_code": "6242665",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
},
{
"_id": "61b5ef3a8bec102408f528ef",
"article_code": "3610890",
"order_number": "",
"status": "shipped",
"tt_url": "https://www.ups.com/track?loc=en_US&tracknum=999&requester=ST/trackdetails",
"unique_id": ""
}
]
}
y.ups.forEach(element => {
console.log(element)
});
CodePudding user response:
since the url is simple enough, you can just directly split it by "&", no need to use regex
so:
ups_tt = ups_tt.split('&')[2];
var spl = "&" ups_tt;
CodePudding user response:
The error is on row var spl = ups_tt.split(/tracknum=(.*)/)[1];
, because ups_tt
is undefined.
for(let i = 0; i < ups.length; i ){ var ups_tt = i['tt_url']; var unique_id = i['unique_id']; var spl = ups_tt.split(/tracknum=(.*)/)[1]; ups_tt = spl.split("&")[0];
i
is the index, it's a number. So, I think you meant to add either let elem = ups[i]
inside the loop, or ups[i]
:
for(let i = 0; i < ups.length; i ){
// A
let elem = ups[i];
var ups_tt = elem['tt_url'];
var unique_id = elem['unique_id'];
// B
var ups_tt = ups[i]['tt_url'];
var unique_id = ups[i]['unique_id'];
// rest of the loop
Also, you could use for .. of.
The
for...of
statement creates a loop iterating over iterable objects, including: built-in String, Array, array-like objects (e.g., arguments or NodeList), TypedArray, Map, Set, and user-defined iterables. It invokes a custom iteration hook with statements to be executed for the value of each distinct property of the object.
Your code would look like this:
for (let elem of ups) {
var ups_tt = elem['tt_url'];
var unique_id = elem['unique_id'];
var spl = ups_tt.split(/tracknum=(.*)/)[1];
ups_tt = spl.split("&")[0];
// rest of the loop
Last point, because there's some answers using dot notation: since ups is the array with various elements where every element is an object, instead of elem['tt_url']
, you can access their properties using dot, like elem.tt_url
, but that's a mostly matter of preference. In some cases, however, the only option is to use array notation: if you're using a string inside a variable as key, or if the property has some special characters. See this question for more info.