I have an array called viewObject.terms
. This array can contain up to 3 items, I need to iterate through this array and save the values into a data object.
ie:
data.term_id_1 = viewObject.terms[0].term_id
data.ticker_1 = viewObject.terms[0].its_ticker
This is what I first tried, but I get the error: Cannot set property '0' of undefined
for (var i=0; i<viewObject.terms.length; i++) {
data.term_id_[i+1] = viewObject.terms[i].term_id;
data.ticker_[i+1] = viewObject.terms[i].its_ticker;
}
So for the moment, I'm just using a switch
case to handle this currently (albeit in a super ugly way):
if (viewObject.terms.length > 0) {
switch(viewObject.terms.length) {
case 1:
data.term_id_1 = viewObject.terms[0].term_id;
data.ticker_1 = viewObject.terms[0].its_ticker;
break;
case 2:
data.term_id_1 = viewObject.terms[0].term_id;
data.ticker_1 = viewObject.terms[0].its_ticker;
data.term_id_2 = viewObject.terms[1].term_id;
data.ticker_2 = viewObject.terms[1].its_ticker;
break;
case 3:
data.term_id_1 = viewObject.terms[0].term_id;
data.ticker_1 = viewObject.terms[0].its_ticker;
data.term_id_2 = viewObject.terms[1].term_id;
data.ticker_2 = viewObject.terms[1].its_ticker;
data.term_id_3 = viewObject.terms[2].term_id;
data.ticker_3 = viewObject.terms[2].its_ticker;
break;
}
}
-
\$\begingroup\$ as phrased, this seems more akin to a stackoverflow type question, because you're receiving an error (exception)... but it's likely answered already, and so it'll just be flagged as a duplicate. \$\endgroup\$Brett Caswell– Brett Caswell2015年10月14日 00:48:01 +00:00Commented Oct 14, 2015 at 0:48
2 Answers 2
Another solution to the problem could be expressed using Array.prototype.forEach()
, as the following:
viewObject.terms.forEach(function(term, index){
data['term_id_' + (index + 1)] = term.term_id;
data['ticker_' + (index + 1)] = term.its_ticker;
});
-
\$\begingroup\$ This one is more elegant than the author's own conclusion.
votes++;
:-) \$\endgroup\$KingCodeFish– KingCodeFish2015年10月14日 00:12:26 +00:00Commented Oct 14, 2015 at 0:12 -
\$\begingroup\$ yeah, that's one way of doing it, but the link you referenced actually provides a sample on how to make a CopyTo function on objects.. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… \$\endgroup\$Brett Caswell– Brett Caswell2015年10月14日 00:56:00 +00:00Commented Oct 14, 2015 at 0:56
Just figured this out! Hope my answer helps someone else:
for (var i=0; i<viewObject.terms.length; i++) {
data['term_id_'+(i+1)] = viewObject.terms[i].term_id;
data['ticker_'+(i+1)] = viewObject.terms[i].its_ticker;
}
This is how you dynamically name and iterate keys inside of an object