Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

i want to skip last property in object and assign its value to previous property

I have one object like below

let a = {
title: {
   value:"developer"
 }
publishedOn:{
    month:{
     value:"jan"
}

    year:{
     value:"2000"
}


}

and i want to convert it like below object

       let b = {
        title : "Developer"
        publishedOn:{
            month:"jan",
        
            year:"2000"
        }
}
      

Constrains are we don't know what properties are inside a variable I have tried iterative method and i though its not the better way please help me for better solution

  function set(path, value) {
        var schema = obj;
        var pList = path.split('.');
        var len = pList.length;
        for(var i = 0; i < len-1; i++) {
            var elem = pList[i];
            if( !payload[elem] ) payload[elem] = {}
            payload = payload[elem];
        }
        payload[pList[len-1]] = value;
        console.log(payload);
    }


    Object.keys(this.formObject).forEach((key)=> {
        if (Object.prototype.hasOwnProperty.call(this.formObject, key)) {
            this.getPath(this.formObject[key],key).then((data:any)=>{
                set(data.path, data.value);
            });
        }
    });
}



async  getPath(obj,path) { //publishedOn , month, yeaer
    let value = "";
    Object.keys(obj).forEach((key)=> {//month
        if (Object.prototype.hasOwnProperty.call(obj, key)) {
            if(key === "value"){
                path =  path;
                value = obj[key]
            }else{
                path =  path + "." + key; // publishedOn.month
                value = obj[key]['value']; // june
            }
        }
    });
    return {path,value }
}
like image 591
Saik3037 Avatar asked Dec 21 '25 01:12

Saik3037


1 Answers

You could look ahead for a coming object and take the final value.

function omitLast(object) {
    return Object.fromEntries(Object.entries(object).map(([key, value]) => [
        key,
        Object.values(value).every(item => item && typeof item === 'object')
            ? omitLast(value)
            : Object.values(value)[0]
    ]));
}

let input = { title: { value: "developer" }, publishedOn: { month: { value: "jan" }, year: { value: "2000" } } };
    result = omitLast(input);

console.log(result);

For old browsers.

function omitLast(object) {
    return Object.keys(object).reduce(function (r, key) {
        r[key] = Object.keys(object[key]).every(function (k) { return object[key][k] && typeof object[key][k] === 'object'; })
            ? omitLast(object[key])
            : object[key][Object.keys(object[key])[0]];
        return r;
    }, {});
}

let input = { title: { value: "developer" }, publishedOn: { month: { value: "jan" }, year: { value: "2000" } } };
    result = omitLast(input);

console.log(result);
like image 58
Nina Scholz Avatar answered Dec 23 '25 14:12

Nina Scholz



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!