Reputation: 2409
I have an array of keys: var keys = ["key1","key2","key3"]
and an array of Objects:
var objArr= [
{"key0":1,"key1":2,"key2":3,"key3":4},
{"key0":5,"key1":6,"key2":7,"key3":8}
]
I want to be able to get the values from the array of objects based off the array of keys. For example, the output of this would be valueArr = [[2,3,4],[6,7,8]]
I've tried the following:
var result = objArr.map(function(a) {
for (var i=0;i<keys.length;i++){
return a[keys[i]];
};
})
but this returns [2,6] because its just returning the first value it gets to. I'm not sure how to fix it so any help is appreciated, thanks!
Upvotes: 2
Views: 3862
Reputation: 386868
You coud use nested Array#map
.
var keys = ["key1", "key2", "key3"],
objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }],
result = objArr.map(function (a) {
return keys.map(function (k) {
return a[k];
});
});
console.log(result);
ES6
var keys = ["key1", "key2", "key3"],
objArr = [{ "key0": 1, "key1": 2, "key2": 3, "key3": 4 }, { "key0": 5, "key1": 6, "key2": 7, "key3": 8 }],
result = objArr.map(a => keys.map(k => a[k]));
console.log(result);
Upvotes: 1
Reputation: 3569
As an alternative, you can use Object.values()
function, as suggested here. Example:
var objArr= [
{"key0":1,"key1":2,"key2":3,"key3":4},
{"key0":5,"key1":6,"key2":7,"key3":8}
];
for(var i in objArr){
objArr[i] = Object.values(objArr[i]);
}
This is not supported by Internet Explorer, Opera or Safari at the moment though
Upvotes: 1
Reputation: 36609
Push value
in array and return array
from Array#map
var keys = ["key1", "key2", "key3"];
var objArr = [{
"key0": 1,
"key1": 2,
"key2": 3,
"key3": 4
}, {
"key0": 5,
"key1": 6,
"key2": 7,
"key3": 8
}];
var result = objArr.map(function(a) {
var arr = [];
for (var i = 0; i < keys.length; i++) {
arr.push(a[keys[i]]);
};
return arr;
});
console.log(result);
Or using Array#map
inside Array#map
var keys = ["key1", "key2", "key3"];
var objArr = [{
"key0": 1,
"key1": 2,
"key2": 3,
"key3": 4
}, {
"key0": 5,
"key1": 6,
"key2": 7,
"key3": 8
}];
var result = objArr.map(function(a) {
return keys.map(function(key) {
return a[key];
});
});
console.log(result);
Upvotes: 3
Reputation: 2985
You need to push the values onto an array, return
will immediately break out of execution and return the value.
Try this:
var result = objArr.map(function(a) {
var res = [];
for (var i=0;i<keys.length;i++){
res.push(a[keys[i]]);
};
return res;
})
Upvotes: 0
Reputation: 9580
don't return
too early , the loop only went through the first item :
var result = objArr.map(function(a) {
var resp = [];
for (var i=0;i<keys.length;i++){
resp.push(a[keys[i]]);
};
return resp;
})
Upvotes: 1