I need to convert a JavaScript object of one type:
object1: [{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}]
To another type of object:
object2 : {"value1":["value1", "value2", "value3"], "value4":["value4","value5","value6"]}
I tried to convert it using this function:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i) {
rv[i] = arr[i];
}
return rv;
}
but I'm getting numerical indexes ([0], [1]) instead of "value1" and "value4". Could you please give me some hint how can I do the conversion from object1 to object2. Thanks.
what you want is to concatenate the vectors inmates?
Try:
function toObject(arr) {
var rv = {}, k;
for (var i = 0; i < arr.length; ++i) {
for(k in arr[i]){
rv[k] = arr[i][k];
}
}
return rv;
}
If this is not what you are looking for then try this: [Fixed (with the help of user @user1689607)]
[edit]:
Object.keys does not work in older browsers. [Fixed]
function toObject(arr,_sort) {
//param1 = Object, param2 = (true:sort, false:default)
var rv = {}, k, firstV = null, keys, obj, tmp, j,
ObjK = Object.keys ? function(ke){
return Object.keys(ke);
} : function(ke){
var r = [];
for(var o in ke){
r[r.length] = o;
}
return r;
};
for (var i = 0; i < arr.length; ++i) {
obj = arr[i];
tmp = [];
keys = _sort===true ? ObjK(obj).sort() : ObjK(obj);
tmp = [obj[keys[0]]];
for (j = 0; j < keys.length; ++j) {
tmp[tmp.length] = obj[keys[j]];
}
rv[obj[keys[0]]] = tmp;
firstV = null;
}
return rv;
}
//sort
console.log(
toObject([{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}]),
true);
//default
console.log(
toObject([{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}])
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With