如何将对象的对象映射到打字稿中的一个对象

时间:2020-12-30 12:43:38

标签: typescript object stream

我有以下输出:

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"
}

所以如果原始对象内的对象有多个元素,则取该对象的第一个元素

1 个答案:

答案 0 :(得分:0)

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

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