Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
292 views
in Technique[技术] by (71.8m points)

How to map an object of objects into one object in typescript

I have the following output:

let obj = {
   id:"111",
   name:"sven",
   nicknames:{
      name1:"svini",
      name2:"sivi"
   }
  cars: {
car1 : "BMW",
car2 : "mercedies"
}
}

how can i map this obj to this output?:

convertedObject = {
   id:"111",
   name:"sven",
   nicknames:"svini",
  cars:"BMW"
}

so if the object inside the original object has more than one element then take the first element of that object


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Since object keys aren't ordered, you'll first have to sort the keys based on the number at the end:

let obj = {
    id:"111",
    name:"sven",
    nicknames:{
        name1:"svini",
        name2:"sivi"
    },
    cars: {
        car1 : "BMW",
        car2 : "mercedies"
    }
};

function getNumber(str) {
    return parseInt(str.match(/d+$/)[0], 10);
}

const convertedObject = {};
for (const key in obj) {
    if (typeof obj[key] === "object") {
        const keys = Object.keys(obj[key]);
        // this is essentially a minBy implementation
        let minVal = getNumber(keys[0]);
        let minKey = keys[0];
        for (const key of keys) {
            const val = getNumber(key);
            if (val < minVal) {
                minVal = val;
                minKey = key;
            }
        }
        convertedObject[key] = obj[key][minKey];
    } else {
        convertedObject[key] = obj[key];
    }
}

console.log(convertedObject);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...