首页 > 解决方案 > 如何将对象的对象映射到打字稿中的一个对象

问题描述

我有以下输出:

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

我如何将此 obj 映射到此输出?:

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

因此,如果原始对象内的对象具有多个元素,则取该对象的第一个元素

标签: typescriptobjectstream

解决方案


由于对象键没有排序,您首先必须根据最后的数字对键进行排序:

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);

推荐阅读