Reputation: 352
I'm attempting to turn the array below into properties for an object, the problem I'm having is properly using nested array notation: array[x][y]
var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
function fromListToObject(array) {
var result = {};
for(var i = 0;i < array.length;i++){
console.log(array[i]); // only here to view output
for(var j = 0;j < array[i].length;j++){
console.log(array[i][j]); // only here to view output
console.log(array[i][j+1]); // only here to view output
result[array[i][j]] = array[i][j+1];
}
}
return result;
}
fromListToObject(array);
The output so far:
[ 'make', 'Ford' ] //inner array
make //should be the key
Ford //should be the value
Ford //where did this come from?
undefined
[ 'model', 'Mustang' ]
model
Mustang
Mustang
undefined
[ 'year', 1964 ]
year
1964
1964
undefined
=> { '1964': undefined, //How in the heck?
make: 'Ford', //<--- actually what I wanted
Ford: undefined,
model: 'Mustang',
Mustang: undefined,
year: 1964 }
I did solve the assignment with forEach
:
function fromListToObject(array) {
var result = {};
array.forEach(function(element){
result[element[0]] = element[1];
});
return result;
}
and I can just capture the inner array into a temporary variable as well, so this is for my edification. Any help/hints would be greatly appreciated. Thanks.
EDIT
I just wanted to say thanks again for the answers, us rookies need guidance like yours.
Upvotes: 2
Views: 6675
Reputation: 3389
It would be best if you did the same thing as in your foreach
solution.
Simple remove the for(var j = 0;j < array[i].length;j++){
loop because it makes no sense with what you are trying to achieve.
Use array[i][0]
and array[i][1]
like you do in the foreach
Upvotes: 0
Reputation: 4383
The .forEach()
solution is certainly the best and clearer way to go. If you want to use traditional loops, you don't need a nested loop. You are just going through the main array and doing a single assignment for each pair. So:
function fromListToObject(array) {
var result = {};
for (var i = 0; i < array.length; i++) {
result[array[i][0]] = array[i][1];
}
return result;
}
Upvotes: 0
Reputation: 1774
The undefined is coming from accessing an index that doesn't exists
try this
var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
function fromListToObject(array) {
var result = {};
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array[i].length-1; j++) { // Change the condition here
result[array[i][j]] = array[i][j + 1];
}
}
return result;
}
fromListToObject(array);
Upvotes: 3