Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert javascript object of one type into another

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.

like image 455
user1853892 Avatar asked Jul 30 '26 02:07

user1853892


1 Answers

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"}])
);
like image 162
Guilherme Nascimento Avatar answered Aug 01 '26 16:08

Guilherme Nascimento



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!